_著者はhttps://www.brightfunds.org/organizations/software-in-the-public-interest-inc [公共の利益のためのソフトウェア]を選択してhttps://do.co/w4doの一部として寄付を受け取りました-cta [DOnationsの書き込み]プログラム。

前書き

Elastic Stack(以前は_ELK Stack_として知られていました)は、https://www.elastic.co/ [Elastic]によって作成されたオープンソースソフトウェアのコレクションであり、任意のソースから生成されたログを検索、分析、 _centralized logging_として知られる任意の形式。 一元化されたログは、サーバーまたはアプリケーションの問題を特定するときに非常に便利です。1つの場所ですべてのログを検索できるからです。 また、特定の時間枠でログを相互に関連付けることにより、複数のサーバーにまたがる問題を特定できるため、便利です。

Elastic Stackには4つの主要コンポーネントがあります。

  • Elasticsearch:収集されたすべてのデータを保存する分散型https://en.wikipedia.org/wiki/Representational_state_transfer[RESTful]検索エンジン。

  • Logstash:受信データをElasticsearchに送信するElastic Stackのデータ処理コンポーネント。

  • Kibana:ログを検索および視覚化するためのWebインターフェイス。

  • Beats:数百または数千のマシンからLogstashまたはElasticsearchにデータを送信できる、軽量の単一目的データシッパー。

このチュートリアルでは、CentOS 7サーバーにhttps://www.elastic.co/elk-stack[Elastic Stack]をインストールします。 Filebeatを含むElastic Stackのすべてのコンポーネントをインストールし、ログとファイルの転送と集中化に使用するBeatをインストールし、それらを設定する方法を学習します。システムログを収集して視覚化します。 さらに、Kibanaは通常 `+ localhost +`でのみ利用できるため、https://www.nginx.com/ [Nginx]を使用してプロキシし、Webブラウザーからアクセスできるようにします。 このチュートリアルの最後に、これらのコンポーネントをすべて、_Elastic Stackサーバーと呼ばれる単一のサーバーにインストールします。

前提条件

このチュートリアルを完了するには、次のものが必要です。

  • CentOS 7を使用した初期サーバーセットアップに従ってセットアップされた1台のCentOS 7サーバー(sudoを使用する非rootユーザーを含む)権限とhttps://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-using-firewalld-on-centos-7[firewall]。 Elastic Stackサーバーが必要とするCPU、RAM、およびストレージの量は、収集するログの量によって異なります。 このチュートリアルでは、Elastic Stackサーバーに次の仕様のVPSを使用します。

  • OS:CentOS 7.5

  • RAM:4GB

  • CPU:2

  • Java 8-ElasticsearchおよびLogstashに必要-サーバーにインストールされています。 Java 9はサポートされていないことに注意してください。 これをインストールするには、https://www.digitalocean.com/community/tutorials/how-to-install-java-on-centos-and-fedora#install-openjdk-8 [「OpenJDK 8 JREのインストール」]セクションに従ってくださいJavaをCentOSにインストールする方法に関するガイドの。

  • サーバーにインストールされたNginx。これは、このガイドの後半でKibanaのリバースプロキシとして構成します。 CentOS 7にNginxをインストールする方法のガイドに従って設定してください。

さらに、許可されていないユーザーがアクセスしたくないサーバーに関する貴重な情報にアクセスするためにElastic Stackが使用されるため、TLS / SSL証明書をインストールしてサーバーを安全に保つことが重要です。 これはオプションですが、強くお勧めします。 最終的にこのガイドの過程でNginxサーバーブロックを変更するため、https://www.digitalocean.com/community/tutorials/how-to-secure-nginx- with-let-s-encrypt-on-centos-7 [CentOS 7で暗号化しましょう]ガイドは、このチュートリアルの2番目のステップの直後です。

サーバーでLet’s Encryptを設定する予定がある場合は、設定する前に次のものが必要です。

  • 完全修飾ドメイン名(FQDN)。 このチュートリアルでは、全体で「++」を使用します。 https://namecheap.com [Namecheap]でドメイン名を購入するか、http://www.freenom.com/en/index.html [Freenom]で無料で入手するか、選択したドメインレジストラを使用できます。 。

  • 次の両方のDNSレコードがサーバーに設定されています。 追加方法の詳細については、https://www.digitalocean.com/community/tutorials/an-introduction-to-digitalocean-dns [DigitalOcean DNSの概要]を参照してください。

  • サーバーのパブリックIPアドレスを指す「++」を持つAレコード。

  • サーバーのパブリックIPアドレスを指す「+ www。+」を持つAレコード。

ステップ1-Elasticsearchのインストールと構成

デフォルトでは、Elastic Stackコンポーネントはパッケージマネージャーからは使用できませんが、Elasticのパッケージリポジトリを追加することで、 `+ yum +`でインストールできます。

システムをパッケージのなりすましから保護するために、Elastic StackのすべてのパッケージはElasticsearch署名キーで署名されています。 キーを使用して認証されたパッケージは、パッケージマネージャーによって信頼されていると見なされます。 このステップでは、Elasticsearchをインストールするために、Elasticsearch公開GPGキーをインポートし、Elasticリポジトリを追加します。

次のコマンドを実行して、Elasticsearch公開署名キーをダウンロードしてインストールします。

sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

次に、Elasticリポジトリを追加します。 任意のテキストエディタを使用して、ファイル「+ elasticsearch.repo 」を「 / etc / yum.repos.d / +」ディレクトリに作成します。 ここでは、_vi_テキストエディターを使用します。

sudo vi /etc/yum.repos.d/elasticsearch.repo

Elastic Stackのコンポーネントをダウンロードしてインストールするために必要な情報をyumに提供するには、 `+ i +`を押して挿入モードに入り、ファイルに次の行を追加します。

/etc/yum.repos.d/elasticsearch.repo

[elasticsearch-6.x]
name=Elasticsearch repository for 6.x packages
baseurl=https://artifacts.elastic.co/packages/6.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

ここには、人間が読めるリポジトリの + name +、リポジトリのデータディレクトリの + baseurl +、およびElasticパッケージの検証に必要な `+ gpgkey +`が含まれています。

終了したら、 `+ ESC `を押して挿入モードを終了し、 `:wq `と ` ENTER +`を押してファイルを保存して終了します。 テキストエディターviとその後継_vim_の詳細については、https://www.digitalocean.com/community/tutorials/installing-and-using-the-vim-text-editor-on-a-cloud-をご覧ください。 server#managing-documents [クラウドサーバーでのVimテキストエディターのインストールと使用]チュートリアル。

リポジトリが追加されたら、Elastic Stackをインストールできます。 https://www.elastic.co/guide/en/elastic-stack/current/installing-elastic-stack.html [公式ドキュメント]によれば、他のコンポーネントの前にElasticsearchをインストールする必要があります。 この順序でインストールすると、各製品が依存するコンポーネントが正しく配置されます。

次のコマンドでElasticsearchをインストールします。

sudo yum install elasticsearch

Elasticsearchのインストールが完了したら、エディターでメイン設定ファイル `+ elasticsearch.yml +`を開きます。

sudo vi /etc/elasticsearch/elasticsearch.yml

Elasticsearchは、ポート「9200」のあらゆる場所からのトラフィックをリッスンします。 Elasticsearchインスタンスへの外部アクセスを制限して、REST APIを介して部外者がデータを読み取ったり、Elasticsearchクラスターをシャットダウンしたりできないようにします。 + network.host`を指定する行を見つけてコメントを外し、その値を + localhost`に置き換えて次のようにします。

/etc/elasticsearch/elasticsearch.yml

. . .
network.host:
. . .

`+ elasticsearch.yml `を保存して閉じます。 次に、 ` systemctl +`でElasticsearchサービスを開始します。

sudo systemctl start elasticsearch

次に、次のコマンドを実行して、サーバーが起動するたびにElasticsearchが起動できるようにします。

sudo systemctl enable elasticsearch

HTTPリクエストを送信することで、Elasticsearchサービスが実行されているかどうかをテストできます。

curl -X GET "localhost:9200"

次のような、ローカルノードに関する基本情報を示す応答が表示されます。

Output{
 "name" : "8oSCBFJ",
 "cluster_name" : "elasticsearch",
 "cluster_uuid" : "1Nf9ZymBQaOWKpMRBfisog",
 "version" : {
   "number" : "6.5.2",
   "build_flavor" : "default",
   "build_type" : "rpm",
   "build_hash" : "9434bed",
   "build_date" : "2018-11-29T23:58:20.891072Z",
   "build_snapshot" : false,
   "lucene_version" : "7.5.0",
   "minimum_wire_compatibility_version" : "5.6.0",
   "minimum_index_compatibility_version" : "5.0.0"
 },
 "tagline" : "You Know, for Search"
}

Elasticsearchが稼働しているので、Elastic Stackの次のコンポーネントであるKibanaをインストールしましょう。

手順2-Kibanaダッシュボードのインストールと構成

https://www.elastic.co/guide/en/elastic-stack/current/installing-elastic-stack.html [公式ドキュメント]のインストール順序に従って、Elasticsearchの次のコンポーネントとしてKibanaをインストールする必要があります。 Kibanaをセットアップしたら、そのインターフェイスを使用して、Elasticsearchが保存するデータを検索および視覚化できるようになります。

前のステップで既にElasticリポジトリーを追加したので、 `+ yum +`を使用してElastic Stackの残りのコンポーネントをインストールするだけです:

sudo yum install kibana

次に、Kibanaサービスを有効にして開始します。

sudo systemctl enable kibana
sudo systemctl start kibana

Kibanaは「+ localhost +」でのみリッスンするように設定されているため、https://www.digitalocean.com/community/tutorials/digitalocean-community-glossary#reverse-proxy [reverse proxy]を設定して、外部アクセスを許可する必要がありますそれ。 この目的のためにNginxを使用します。これはサーバーに既にインストールされているはずです。

最初に、 `+ openssl `コマンドを使用して、Kibana Webインターフェースへのアクセスに使用する管理用Kibanaユーザーを作成します。 例として、このアカウントに「+」という名前を付けますが、セキュリティを強化するために、推測が困難な非標準の名前をユーザーに選択することをお勧めします。

次のコマンドは、管理用のKibanaユーザーとパスワードを作成し、それらを `+ htpasswd.users +`ファイルに保存します。 このユーザー名とパスワードを要求し、このファイルを一時的に読み取るようにNginxを構成します。

echo ":`openssl passwd -apr1`" | sudo tee -a /etc/nginx/htpasswd.users

プロンプトでパスワードを入力して確認します。 Kibana Webインターフェースにアクセスするにはログインが必要になるため、このログインを忘れないでください。

次に、Nginxサーバーブロックファイルを作成します。 例として、このファイルを「+ .conf +」と呼びますが、よりわかりやすい名前を付けると役立つ場合があります。 たとえば、このサーバーにFQDNとDNSレコードが設定されている場合、FQDNに基づいてこのファイルに名前を付けることができます。

sudo vi /etc/nginx/conf.d/.conf

次のコードブロックをファイルに追加し、サーバーのFQDNまたはパブリックIPアドレスに一致するように「+」と「 www。」を更新してください。 このコードは、サーバーのHTTPトラフィックを ` localhost:5601 `でリッスンしているKibanaアプリケーションに転送するようにNginxを構成します。 また、 ` htpasswd.users +`ファイルを読み取り、基本認証を要求するようにNginxを構成します。

https://www.digitalocean.com/community/tutorials/how-to-install-nginx-on-centos-7 [前提条件のNginxチュートリアル]を最後まで実行した場合、このファイルは既に作成されている可能性があることに注意してください。いくつかのコンテンツを追加しました。 その場合は、ファイル内の既存のコンテンツをすべて削除してから、次を追加してください。

example.com.conf ’> / etc / nginx / conf.d / .conf

server {
   listen 80;

   server_name  www.;

   auth_basic "Restricted Access";
   auth_basic_user_file /etc/nginx/htpasswd.users;

   location / {
       proxy_pass http://localhost:5601;
       proxy_http_version 1.1;
       proxy_set_header Upgrade $http_upgrade;
       proxy_set_header Connection 'upgrade';
       proxy_set_header Host $host;
       proxy_cache_bypass $http_upgrade;
   }
}

完了したら、ファイルを保存して閉じます。

次に、構成の構文エラーを確認します。

sudo nginx -t

出力でエラーが報告された場合は、戻って、構成ファイルに配置したコンテンツが正しく追加されたことを再確認してください。 出力に「+ syntax is ok +」が表示されたら、先に進み、Nginxサービスを再起動します。

sudo systemctl restart nginx

デフォルトでは、SELinuxセキュリティポリシーが適用されるように設定されています。 次のコマンドを実行して、Nginxがプロキシされたサービスにアクセスできるようにします。

sudo setsebool httpd_can_network_connect 1 -P

SELinuxの詳細については、チュートリアルhttps://www.digitalocean.com/community/tutorials/an-introduction-to-selinux-on-centos-7-part-1-basic-concepts[SELinuxの概要]をご覧ください。 CentOS 7]。

Kibanaは、お客様のFQDNまたはElastic StackサーバーのパブリックIPアドレスを介してアクセスできるようになりました。 Kibanaサーバーのステータスページを確認するには、次のアドレスに移動し、プロンプトが表示されたらログイン認証情報を入力します。

http:///status

このステータスページには、サーバーのリソース使用状況に関する情報が表示され、インストールされているプラ​​グインが一覧表示されます。

image:https://i.imgur.com/QSiMhUD.png [| Kibanaステータスページ]

Kibanaダッシュボードが構成されたので、次のコンポーネントであるLogstashをインストールしましょう。

ステップ3-Logstashのインストールと構成

BeatsがデータをElasticsearchデータベースに直接送信することは可能ですが、最初にLogstashを使用してデータを処理することをお勧めします。 これにより、さまざまなソースからデータを収集し、共通の形式に変換して、別のデータベースにエクスポートできます。

次のコマンドでLogstashをインストールします。

sudo yum install logstash

Logstashのインストール後、構成に進むことができます。 Logstashの設定ファイルはJSON形式で記述され、 `+ / etc / logstash / conf.d `ディレクトリにあります。 設定する際、Logstashを一端でデータを取り込み、何らかの方法で処理し、その宛先(この場合、Elasticsearch)に送信するパイプラインと考えると便利です。 Logstashパイプラインには、2つの必須要素、「 inputs」と「+ outputs」、および1つのオプション要素、「+ filter +」があります。 入力プラグインはソースからのデータを消費し、フィルタープラグインはデータを処理し、出力プラグインはデータを宛先に書き込みます。

image:https://assets.digitalocean.com/articles/elastic_1804/logstash_pipeline_updated.png [Logstash pipeline]

Filebeat入力をセットアップする `+ 02-beats-input.conf +`という設定ファイルを作成します。

sudo vi /etc/logstash/conf.d/02-beats-input.conf

次の「+ input 」設定を挿入します。 これは、TCPポート「+5044」でリッスンする「+ beats +」入力を指定します。

/etc/logstash/conf.d/02-beats-input.conf

input {
 beats {
   port => 5044
 }
}

ファイルを保存して閉じます。 次に、 `+ 10-syslog-filter.conf +`という設定ファイルを作成します。これにより、システムログ用のフィルター(_syslogs_とも呼ばれます)が追加されます。

sudo vi /etc/logstash/conf.d/10-syslog-filter.conf

次のsyslogフィルター構成を挿入します。 このシステムログの設定例は、https://www.elastic.co/guide/en/logstash/6.x/logstash-config-for-filebeat-modules.html#parsing-system [公式のElastic documentation]から取得しました。 このフィルターは、着信システムログを解析して、事前定義されたKibanaダッシュボードで構造化および使用可能にするために使用されます。

/etc/logstash/conf.d/10-syslog-filter.conf

filter {
 if [fileset][module] == "system" {
   if [fileset][name] == "auth" {
     grok {
       match => { "message" => ["%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} sshd(?:\[%{POSINT:[system][auth][pid]}\])?: %{DATA:[system][auth][ssh][event]} %{DATA:[system][auth][ssh][method]} for (invalid user )?%{DATA:[system][auth][user]} from %{IPORHOST:[system][auth][ssh][ip]} port %{NUMBER:[system][auth][ssh][port]} ssh2(: %{GREEDYDATA:[system][auth][ssh][signature]})?",
                 "%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} sshd(?:\[%{POSINT:[system][auth][pid]}\])?: %{DATA:[system][auth][ssh][event]} user %{DATA:[system][auth][user]} from %{IPORHOST:[system][auth][ssh][ip]}",
                 "%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} sshd(?:\[%{POSINT:[system][auth][pid]}\])?: Did not receive identification string from %{IPORHOST:[system][auth][ssh][dropped_ip]}",
                 "%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} sudo(?:\[%{POSINT:[system][auth][pid]}\])?: \s*%{DATA:[system][auth][user]} :( %{DATA:[system][auth][sudo][error]} ;)? TTY=%{DATA:[system][auth][sudo][tty]} ; PWD=%{DATA:[system][auth][sudo][pwd]} ; USER=%{DATA:[system][auth][sudo][user]} ; COMMAND=%{GREEDYDATA:[system][auth][sudo][command]}",
                 "%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} groupadd(?:\[%{POSINT:[system][auth][pid]}\])?: new group: name=%{DATA:system.auth.groupadd.name}, GID=%{NUMBER:system.auth.groupadd.gid}",
                 "%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} useradd(?:\[%{POSINT:[system][auth][pid]}\])?: new user: name=%{DATA:[system][auth][user][add][name]}, UID=%{NUMBER:[system][auth][user][add][uid]}, GID=%{NUMBER:[system][auth][user][add][gid]}, home=%{DATA:[system][auth][user][add][home]}, shell=%{DATA:[system][auth][user][add][shell]}$",
                 "%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} %{DATA:[system][auth][program]}(?:\[%{POSINT:[system][auth][pid]}\])?: %{GREEDYMULTILINE:[system][auth][message]}"] }
       pattern_definitions => {
         "GREEDYMULTILINE"=> "(.|\n)*"
       }
       remove_field => "message"
     }
     date {
       match => [ "[system][auth][timestamp]", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
     }
     geoip {
       source => "[system][auth][ssh][ip]"
       target => "[system][auth][ssh][geoip]"
     }
   }
   else if [fileset][name] == "syslog" {
     grok {
       match => { "message" => ["%{SYSLOGTIMESTAMP:[system][syslog][timestamp]} %{SYSLOGHOST:[system][syslog][hostname]} %{DATA:[system][syslog][program]}(?:\[%{POSINT:[system][syslog][pid]}\])?: %{GREEDYMULTILINE:[system][syslog][message]}"] }
       pattern_definitions => { "GREEDYMULTILINE" => "(.|\n)*" }
       remove_field => "message"
     }
     date {
       match => [ "[system][syslog][timestamp]", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
     }
   }
 }
}

終了したら、ファイルを保存して閉じます。

最後に、 `+ 30-elasticsearch-output.conf +`という設定ファイルを作成します:

sudo vi /etc/logstash/conf.d/30-elasticsearch-output.conf

次の「+ output 」設定を挿入します。 この出力は、使用されるBeatにちなんで名付けられたインデックスで、 ` localhost:9200 +`で実行されているElasticsearchにBeatsデータを保存するようにLogstashを設定します。 このチュートリアルで使用されるビートはFilebeatです。

/etc/logstash/conf.d/30-elasticsearch-output.conf

output {
 elasticsearch {
   hosts => ["localhost:9200"]
   manage_template => false
   index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
 }
}

ファイルを保存して閉じます。

Filebeat入力を使用する他のアプリケーションにフィルターを追加する場合は、入力と出力の構成の間でソートされるようにファイルに名前を付けてください。つまり、ファイル名は + 02 + `および + 30 + `。

次のコマンドでLogstash構成をテストします。

sudo -u logstash /usr/share/logstash/bin/logstash --path.settings /etc/logstash -t

構文エラーがない場合、数秒後に出力に「+ Configuration OK」と表示されます。 出力にこれが表示されない場合は、出力に表示されるエラーを確認し、構成を更新して修正します。

構成テストが成功したら、Logstashを開始して有効にし、構成の変更を有効にします。

sudo systemctl start logstash
sudo systemctl enable logstash

Logstashが正しく実行され、完全に構成されたので、Filebeatをインストールしましょう。

手順4-Filebeatのインストールと構成

Elastic Stackは、Beatsと呼ばれるいくつかの軽量データシッパーを使用して、さまざまなソースからデータを収集し、LogstashまたはElasticsearchに転送します。 以下は、現在Elasticから入手可能なビートです。

  • Filebeat:ログファイルを収集して出荷します。

  • Metricbeat:システムおよびサービスからメトリックを収集します。

  • Packetbeat:ネットワークデータを収集して分析します。

  • Winlogbeat:Windowsイベントログを収集します。

  • Auditbeat:Linux監査フレームワークデータを収集し、ファイルの整合性を監視します。

  • Heartbeat:アクティブなプロービングでサービスの可用性を監視します。

このチュートリアルでは、Filebeatを使用してローカルログをElastic Stackに転送します。

`+ yum +`を使用してFilebeatをインストールします。

sudo yum install filebeat

次に、Logstashに接続するようにFilebeatを構成します。 ここでは、Filebeatに付属のサンプル構成ファイルを変更します。

Filebeat構成ファイルを開きます。

sudo vi /etc/filebeat/filebeat.yml

Filebeatは多数の出力をサポートしていますが、通常は追加処理のためにイベントをElasticsearchまたはLogstashに直接送信するだけです。 このチュートリアルでは、Logstashを使用して、Filebeatによって収集されたデータに対して追加の処理を実行します。 FilebeatはデータをElasticsearchに直接送信する必要がないため、その出力を無効にしましょう。 そのためには、「+ output.elasticsearch 」セクションを見つけて、次の行の前に「#+」を付けてコメントアウトします。

/etc/filebeat/filebeat.yml

...
output.elasticsearch:
 # Array of hosts to connect to.
 hosts: ["localhost:9200"]
...

次に、 `+ output.logstash `セクションを設定します。 `#。`を削除して、 ` output.logstash:`と ` hosts:[” localhost:5044 “] `の行のコメントを解除します。 これにより、先ほどLogstash入力を指定したポート「+5044」でElastic StackサーバーのLogstashに接続するようにFilebeatが構成されます。

/etc/filebeat/filebeat.yml

output.logstash:
 # The Logstash hosts
 hosts: ["localhost:5044"]

ファイルを保存して閉じます。

Filebeat modulesを使用してFilebeatの機能を拡張できるようになりました。 このチュートリアルでは、https://www.elastic.co/guide/en/beats/filebeat/6.5/filebeat-module-system.html [system]モジュールを使用します。このモジュールは、システムロギングによって作成されたログを収集および解析します一般的なLinuxディストリビューションのサービス。

有効にしましょう:

sudo filebeat modules enable system

次を実行すると、有効化および無効化されたモジュールのリストを表示できます。

sudo filebeat modules list

次のようなリストが表示されます。

OutputEnabled:
system

Disabled:
apache2
auditd
elasticsearch
haproxy
icinga
iis
kafka
kibana
logstash
mongodb
mysql
nginx
osquery
postgresql
redis
suricata
traefik

デフォルトでは、Filebeatはsyslogおよび許可ログのデフォルトパスを使用するように設定されています。 このチュートリアルの場合、構成を変更する必要はありません。 モジュールのパラメーターは、 `+ / etc / filebeat / modules.d / system.yml +`設定ファイルで確認できます。

次に、インデックステンプレートをElasticsearchにロードします。 https://www.elastic.co/guide/en/elasticsearch/reference/current/basic_concepts.html#_index[_Elasticsearch index]は、同様の特性を持つドキュメントのコレクションです。 インデックスは名前で識別されます。名前は、インデックス内でさまざまな操作を実行するときにインデックスを参照するために使用されます。 インデックステンプレートは、新しいインデックスが作成されると自動的に適用されます。

テンプレートをロードするには、次のコマンドを使用します。

sudo filebeat setup --template -E output.logstash.enabled=false -E 'output.elasticsearch.hosts=["localhost:9200"]'

これにより、次のような出力が得られます。

OutputLoaded index template

Filebeatには、KibanaでFilebeatデータを視覚化できるサンプルKibanaダッシュボードが付属しています。 ダッシュボードを使用する前に、インデックスパターンを作成し、ダッシュボードをKibanaに読み込む必要があります。

ダッシュボードが読み込まれると、FilebeatはElasticsearchに接続してバージョン情報を確認します。 Logstashが有効なときにダッシュボードをロードするには、Logstash出力を手動で無効にし、Elasticsearch出力を有効にする必要があります。

sudo filebeat setup -e -E output.logstash.enabled=false -E output.elasticsearch.hosts=['localhost:9200'] -E setup.kibana.host=localhost:5601

次のような出力が表示されます。

Output. . .
2018-12-05T21:23:33.806Z        INFO    elasticsearch/client.go:163     Elasticsearch url: http://localhost:9200
2018-12-05T21:23:33.811Z        INFO    elasticsearch/client.go:712     Connected to Elasticsearch version 6.5.2
2018-12-05T21:23:33.815Z        INFO    template/load.go:129    Template already exists and will not be overwritten.
Loaded index template
Loading dashboards (Kibana must be running and reachable)
2018-12-05T21:23:33.816Z        INFO    elasticsearch/client.go:163     Elasticsearch url: http://localhost:9200
2018-12-05T21:23:33.819Z        INFO    elasticsearch/client.go:712     Connected to Elasticsearch version 6.5.2
2018-12-05T21:23:33.819Z        INFO    kibana/client.go:118    Kibana url: http://localhost:5601
2018-12-05T21:24:03.981Z        INFO    instance/beat.go:717    Kibana dashboards successfully loaded.
Loaded dashboards
2018-12-05T21:24:03.982Z        INFO    elasticsearch/client.go:163     Elasticsearch url: http://localhost:9200
2018-12-05T21:24:03.984Z        INFO    elasticsearch/client.go:712     Connected to Elasticsearch version 6.5.2
2018-12-05T21:24:03.984Z        INFO    kibana/client.go:118    Kibana url: http://localhost:5601
2018-12-05T21:24:04.043Z        WARN    fileset/modules.go:388  X-Pack Machine Learning is not enabled
2018-12-05T21:24:04.080Z        WARN    fileset/modules.go:388  X-Pack Machine Learning is not enabled
Loaded machine learning job configurations

これで、Filebeatを起動して有効にできます。

sudo systemctl start filebeat
sudo systemctl enable filebeat

Elastic Stackを正しく設定すると、Filebeatはsyslogおよび認証ログのLogstashへの出荷を開始し、LogstashはそのデータをElasticsearchにロードします。

Elasticsearchが実際にこのデータを受信して​​いることを確認するには、次のコマンドでFilebeatインデックスをクエリします。

curl -X GET 'http://localhost:9200/filebeat-*/_search?pretty'

次のような出力が表示されます。

Output{
 "took" : 1,
 "timed_out" : false,
 "_shards" : {
   "total" : 3,
   "successful" : 3,
   "skipped" : 0,
   "failed" : 0
 },
 "hits" : {
   "total" : 3225,
   "max_score" : 1.0,
   "hits" : [
     {
       "_index" : "filebeat-6.5.2-2018.12.05",
       "_type" : "doc",
       "_id" : "vf5GgGcB_g3p-PRo_QOw",
       "_score" : 1.0,
       "_source" : {
         "@timestamp" : "2018-12-05T19:00:34.000Z",
         "source" : "/var/log/secure",
         "meta" : {
           "cloud" : {
. . .

出力に合計ヒット数が0と表示される場合、Elasticsearchは検索したインデックスの下にログをロードしていないため、エラーの設定を確認する必要があります。 期待どおりの出力を受け取ったら、次のステップに進みます。このステップでは、Kibanaのダッシュボードのいくつかに精通します。

ステップ5-Kibanaダッシュボードの調査

先にインストールしたWebインターフェースであるKibanaを見てみましょう。

Webブラウザーで、Elastic StackサーバーのFQDNまたはパブリックIPアドレスに移動します。 手順2で定義したログイン資格情報を入力すると、Kibanaホームページが表示されます。

image:https://assets.digitalocean.com/articles/elastic_CentOS7_120618/Kibana_Homepage_TN.png [Kibana Homepage]

左側のナビゲーションバーにある[発見]リンクをクリックします。 * Discover ページで、定義済みの filebeat-**インデックスパターンを選択して、Filebeatデータを表示します。 デフォルトでは、過去15分間のすべてのログデータが表示されます。 ログイベントを含むヒストグラムと、以下のログメッセージが表示されます。

image:https://assets.digitalocean.com/articles/elastic_CentOS7_120618/Kibana_DiscoverPage_TN.png [ページを発見]

ここでは、ログを検索して参照したり、ダッシュボードをカスタマイズしたりできます。 ただし、この時点では、Elastic Stackサーバーからsyslogを収集しているだけなので、あまり多くはありません。

左側のパネルを使用して*ダッシュボード*ページに移動し、* Filebeatシステム*ダッシュボードを検索します。 そこに来たら、Filebeat `+ system`モジュールに付属しているサンプルダッシュボードを検索できます。

たとえば、syslogメッセージに基づいて詳細な統計を表示できます。

画像:https://assets.digitalocean.com/articles/elastic_CentOS7_120618/Kibana_SyslogDashboard_TN.png [Syslog Dashboard]

また、どのユーザーが `+ sudo +`コマンドを使用したか、および次の場合も表示できます。

image:https://assets.digitalocean.com/articles/elastic_CentOS7_120618/Kibana_Sudo_Page_TN.png [Sudo Dashboard]

Kibanaには、グラフ化やフィルタリングなど、他にも多くの機能がありますので、気軽に探索してください。

結論

このチュートリアルでは、Elastic Stackをインストールして設定し、システムログを収集および分析しました。 Beatsを使用して、あらゆる種類のログまたはインデックス付きデータをLogstashに送信できることを忘れないでください。これにより、データがElasticsearchで簡単に読み取れる一貫した形式に変換されます。