著者は、Write for DOnationsプログラムの一部として寄付を受け取るためにthe Internet Archiveを選択しました。
前書き
Elastic Stack(以前はELK Stackと呼ばれていました)は、Elasticによって生成されたオープンソースソフトウェアのコレクションであり、任意のソースから生成されたログを任意の形式で検索、分析、および視覚化できます。 centralized loggingとして知られています。 一元化されたログは、サーバーまたはアプリケーションの問題を特定するときに非常に便利です。1つの場所ですべてのログを検索できるからです。 また、特定の時間枠でログを相互に関連付けることにより、複数のサーバーにまたがる問題を特定できるため、便利です。
Elastic Stackには4つの主要コンポーネントがあります。
-
Elasticsearch:収集されたすべてのデータを保存する分散型RESTful検索エンジン。
-
Logstash:着信データをElasticsearchに送信するElasticStackのデータ処理コンポーネント。
-
Kibana:ログを検索および視覚化するためのWebインターフェース。
-
Beats:数百または数千のマシンからLogstashまたはElasticsearchにデータを送信できる軽量の単一目的のデータシッパー。
このチュートリアルでは、Ubuntu 18.04サーバーにElastic Stackをインストールします。 ログとファイルの転送と集中化に使用されるBeatであるFilebeatを含む、Elastic Stackのすべてのコンポーネントをインストールし、システムログを収集して視覚化するように構成する方法を学習します。 さらに、Kibanaは通常localhost
でのみ使用できるため、Nginxを使用してプロキシし、Webブラウザーからアクセスできるようにします。 これらすべてのコンポーネントを単一のサーバーにインストールします。これをElastic Stack serverと呼びます。
[.note]#Note:Elastic Stackをインストールするときは、スタック全体で同じバージョンを使用する必要があります。 このチュートリアルでは、スタック全体の最新バージョンをインストールします。これは、この記事の執筆時点では、Elasticsearch 6.4.3、Kibana 6.4.3、Logstash 6.4.3、およびFilebeat 6.4.3。
#です。
前提条件
このチュートリアルを完了するには、次のものが必要です。
-
sudo権限を持つ非rootユーザーと
ufw
で構成されたファイアウォールを含む、Initial Server Setup Guide for Ubuntu 18.04に従ってセットアップされたUbuntu18.04サーバー。 Elastic Stackサーバーが必要とするCPU、RAM、およびストレージの量は、収集するログの量によって異なります。 このチュートリアルでは、Elastic Stackサーバーに次の仕様のVPSを使用します。-
OS:Ubuntu 18.04
-
RAM:4GB
-
CPU:2
-
-
サーバーにインストールされているJava 8(ElasticsearchとLogstashに必要)。 Java 9はサポートされていないことに注意してください。 これをインストールするには、Ubuntu18.04にJava8をインストールする方法に関するガイドの“Installing the Oracle JDK”セクションに従ってください。
-
サーバーにインストールされたNginx。これは、このガイドの後半でKibanaのリバースプロキシとして構成します。 これを設定するには、How to Install Nginx on Ubuntu 18.04に関するガイドに従ってください。
さらに、許可されていないユーザーがアクセスしたくないサーバーに関する貴重な情報にアクセスするためにElastic Stackが使用されるため、TLS / SSL証明書をインストールしてサーバーを安全に保つことが重要です。 これはオプションですが、strongly encouragedです。
ただし、このガイドの過程で最終的にNginxサーバーブロックに変更を加えるため、このチュートリアルの2番目のステップの最後にLet’s Encrypt on Ubuntu 18.04ガイドを完了する方が理にかなっている可能性があります。 それを念頭に置いて、サーバーでLet's Encryptを設定する場合は、設定する前に次のものが必要です。
-
完全修飾ドメイン名(FQDN)。 このチュートリアルでは、全体を通して
example.com
を使用します。 Namecheapでドメイン名を購入するか、Freenomで無料でドメイン名を取得するか、選択したドメインレジストラを使用できます。 -
次の両方のDNSレコードがサーバーに設定されています。 それらを追加する方法の詳細については、this introduction to DigitalOcean DNSをたどることができます。
-
サーバーのパブリックIPアドレスを指す
example.com
を含むAレコード。 -
サーバーのパブリックIPアドレスを指す
www.example.com
を含むAレコード。
-
[[step-1 -—- installing-and-configuring-elasticsearch]] ==ステップ1—Elasticsearchのインストールと構成
Elastic Stackコンポーネントは、Ubuntuのデフォルトパッケージリポジトリでは使用できません。 ただし、Elasticのパッケージソースリストを追加した後、APTでインストールできます。
システムをパッケージのなりすましから保護するために、Elastic StackのすべてのパッケージはElasticsearch署名キーで署名されています。 キーを使用して認証されたパッケージは、パッケージマネージャーによって信頼されていると見なされます。 この手順では、Elasticsearchをインストールするために、Elasticsearchの公開GPGキーをインポートし、Elasticパッケージソースリストを追加します。
開始するには、次のコマンドを実行してElasticsearch公開GPGキーをAPTにインポートします。
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
次に、Elasticソースリストをsources.list.d
ディレクトリに追加します。ここで、APTは新しいソースを探します。
echo "deb https://artifacts.elastic.co/packages/6.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list
次に、APTが新しいElasticソースを読み取るようにパッケージリストを更新します。
sudo apt update
次に、次のコマンドでElasticsearchをインストールします。
sudo apt install elasticsearch
Elasticsearchのインストールが完了したら、お好みのテキストエディターを使用して、Elasticsearchのメイン構成ファイルelasticsearch.yml
を編集します。 ここでは、nano
を使用します。
sudo nano /etc/elasticsearch/elasticsearch.yml
[.note]#Note: Elasticsearchの構成ファイルはYAML形式です。つまり、インデントが非常に重要です。 このファイルを編集するときは、スペースを追加しないでください。
#
Elasticsearchは、ポート9200
であらゆる場所からのトラフィックをリッスンします。 Elasticsearchインスタンスへの外部アクセスを制限して、REST APIを介して部外者がデータを読み取ったり、Elasticsearchクラスターをシャットダウンしたりしないようにします。 network.host
を指定する行を見つけてコメントを外し、その値をlocalhost
に置き換えて、次のようにします。
/etc/elasticsearch/elasticsearch.yml
. . .
network.host: localhost
. . .
nano
を使用している場合は、CTRL+X
、Y
、ENTER
の順に押して、elasticsearch.yml
を保存して閉じます。 次に、systemctl
を使用してElasticsearchサービスを開始します。
sudo systemctl start elasticsearch
次に、次のコマンドを実行して、サーバーが起動するたびにElasticsearchが起動できるようにします。
sudo systemctl enable elasticsearch
HTTPリクエストを送信することで、Elasticsearchサービスが実行されているかどうかをテストできます。
curl -X GET "localhost:9200"
次のような、ローカルノードに関する基本情報を示す応答が表示されます。
Output{
"name" : "ZlJ0k2h",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "beJf9oPSTbecP7_i8pRVCw",
"version" : {
"number" : "6.4.2",
"build_flavor" : "default",
"build_type" : "deb",
"build_hash" : "04711c2",
"build_date" : "2018-09-26T13:34:09.098244Z",
"build_snapshot" : false,
"lucene_version" : "7.4.0",
"minimum_wire_compatibility_version" : "5.6.0",
"minimum_index_compatibility_version" : "5.0.0"
},
"tagline" : "You Know, for Search"
}
Elasticsearchが稼働しているので、Elastic Stackの次のコンポーネントであるKibanaをインストールしましょう。
[[step-2 -—- installing-and-configuring-the-kibana-dashboard]] ==ステップ2—Kibanaダッシュボードのインストールと構成
official documentationによると、Elasticsearchをインストールした後にのみKibanaをインストールする必要があります。 この順序でインストールすると、各製品が依存するコンポーネントが正しく配置されます。
前の手順でElasticパッケージソースをすでに追加しているため、apt
を使用してElasticStackの残りのコンポーネントをインストールできます。
sudo apt install kibana
次に、Kibanaサービスを有効にして開始します。
sudo systemctl enable kibana
sudo systemctl start kibana
Kibanaはlocalhost
のみをリッスンするように構成されているため、外部アクセスを許可するようにreverse proxyを設定する必要があります。 この目的のためにNginxを使用します。これはサーバーに既にインストールされているはずです。
まず、openssl
コマンドを使用して、KibanaWebインターフェイスへのアクセスに使用する管理用Kibanaユーザーを作成します。 例として、このアカウントにkibanaadmin
という名前を付けますが、セキュリティを強化するために、推測が難しいユーザーの非標準名を選択することをお勧めします。
次のコマンドは、管理用Kibanaユーザーとパスワードを作成し、それらをhtpasswd.users
ファイルに保存します。 このユーザー名とパスワードを要求し、このファイルを一時的に読み取るようにNginxを構成します。
echo "kibanaadmin:`openssl passwd -apr1`" | sudo tee -a /etc/nginx/htpasswd.users
プロンプトでパスワードを入力して確認します。 Kibana Webインターフェースにアクセスするにはログインが必要になるため、このログインを忘れないでください。
次に、Nginxサーバーブロックファイルを作成します。 例として、このファイルをexample.com
と呼びますが、よりわかりやすい名前を付けると役立つ場合があります。 たとえば、このサーバーにFQDNとDNSレコードが設定されている場合、FQDNに基づいてこのファイルに名前を付けることができます。
sudo nano /etc/nginx/sites-available/example.com
次のコードブロックをファイルに追加します。サーバーのFQDNまたはパブリックIPアドレスと一致するようにexample.com
を更新してください。 このコードは、サーバーのHTTPトラフィックをlocalhost:5601
をリッスンしているKibanaアプリケーションに転送するようにNginxを構成します。 さらに、htpasswd.users
ファイルを読み取り、基本認証を要求するようにNginxを構成します。
prerequisite Nginx tutorialを最後までたどった場合は、このファイルをすでに作成していて、コンテンツを入力している可能性があることに注意してください。 その場合は、ファイル内の既存のコンテンツをすべて削除してから、次を追加してください。
/etc/nginx/sites-available/example.com
server {
listen 80;
server_name example.com;
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;
}
}
完了したら、ファイルを保存して閉じます。
次に、sites-enabled
ディレクトリへのシンボリックリンクを作成して、新しい構成を有効にします。 Nginx前提条件で同じ名前のサーバーブロックファイルを既に作成している場合、このコマンドを実行する必要はありません。
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/example.com
次に、構成の構文エラーを確認します。
sudo nginx -t
出力でエラーが報告された場合は、戻って、構成ファイルに配置したコンテンツが正しく追加されたことを再確認してください。 出力にsyntax is ok
が表示されたら、先に進んでNginxサービスを再起動します。
sudo systemctl restart nginx
サーバーの初期セットアップガイドに従った場合、UFWファイアウォールを有効にする必要があります。 Nginxへの接続を許可するには、次のように入力してルールを調整できます。
sudo ufw allow 'Nginx Full'
[。注意]##
Note:前提条件のNginxチュートリアルに従った場合、ファイアウォールを通過するNginx HTTP
プロファイルを許可するUFWルールを作成した可能性があります。 Nginx Full
プロファイルはファイアウォールを通過するHTTPトラフィックとHTTPSトラフィックの両方を許可するため、前提条件のチュートリアルで作成したルールを安全に削除できます。 次のコマンドを使用します。
sudo ufw delete allow 'Nginx HTTP'
Kibanaは、お客様のFQDNまたはElastic StackサーバーのパブリックIPアドレスを介してアクセスできるようになりました。 Kibanaサーバーのステータスページを確認するには、次のアドレスに移動し、プロンプトが表示されたらログイン認証情報を入力します。
http://your_server_ip/status
このステータスページには、サーバーのリソース使用状況に関する情報が表示され、インストールされているプラグインが一覧表示されます。
[.note]#Note:「前提条件」セクションで説明したように、サーバーでSSL / TLSを有効にすることをお勧めします。 今すぐthis tutorialをフォローして、Ubuntu18.04でNginxの無料SSL証明書を取得できます。 SSL / TLS証明書を取得したら、戻ってこのチュートリアルを完了することができます。
#
Kibanaダッシュボードが構成されたので、次のコンポーネントであるLogstashをインストールしましょう。
[[step-3 -—- installing-and-configuring-logstash]] ==ステップ3—Logstashのインストールと構成
BeatsがデータをElasticsearchデータベースに直接送信することは可能ですが、Logstashを使用してデータを処理することをお勧めします。 これにより、さまざまなソースからデータを収集し、共通の形式に変換して、別のデータベースにエクスポートできます。
次のコマンドでLogstashをインストールします。
sudo apt install logstash
Logstashのインストール後、構成に進むことができます。 Logstashの構成ファイルはJSON形式で記述され、/etc/logstash/conf.d
ディレクトリにあります。 設定する際、Logstashを一端でデータを取り込み、何らかの方法で処理し、その宛先(この場合、Elasticsearch)に送信するパイプラインと考えると便利です。 Logstashパイプラインには、2つの必須要素input
とoutput
、および1つのオプション要素filter
があります。 入力プラグインはソースからのデータを消費し、フィルタープラグインはデータを処理し、出力プラグインはデータを宛先に書き込みます。
Filebeat入力を設定する02-beats-input.conf
という構成ファイルを作成します。
sudo nano /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 nano /etc/logstash/conf.d/10-syslog-filter.conf
次のsyslogフィルター構成を挿入します。 このサンプルシステムログ構成は、official 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 nano /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入力を使用する他のアプリケーションにフィルターを追加する場合は、ファイルに名前を付けて、入力構成と出力構成の間でソートされるようにしてください。つまり、ファイル名は%(()の間の2桁の数字で始まる必要があります。 t0)sおよび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をインストールしましょう。
[[step-4 -—- installing-and-configuring-filebeat]] ==ステップ4—Filebeatのインストールと構成
Elastic Stackは、Beatsと呼ばれるいくつかの軽量データシッパーを使用して、さまざまなソースからデータを収集し、LogstashまたはElasticsearchに転送します。 現在、Elasticから入手可能なBeatsは次のとおりです。
-
Filebeat:ログファイルを収集して送信します。
-
Metricbeat:システムとサービスからメトリックを収集します。
-
Packetbeat:ネットワークデータを収集して分析します。
-
Winlogbeat:Windowsイベントログを収集します。
-
Auditbeat:Linux監査フレームワークデータを収集し、ファイルの整合性を監視します。
-
Heartbeat:アクティブプロービングを使用してサービスの可用性を監視します。
このチュートリアルでは、Filebeatを使用してローカルログをElastic Stackに転送します。
apt
を使用してFilebeatをインストールします。
sudo apt install filebeat
次に、Logstashに接続するようにFilebeatを構成します。 ここでは、Filebeatに付属のサンプル構成ファイルを変更します。
Filebeat構成ファイルを開きます。
sudo nano /etc/filebeat/filebeat.yml
[.note]#Note: Elasticsearchと同様に、Filebeatの構成ファイルはYAML形式です。 これは、適切なインデントが重要であることを意味するため、これらの手順に示されているのと同じ数のスペースを使用してください。
#
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
でElasticStackサーバーのLogstashに接続するようにFilebeatが構成されます。
/etc/filebeat/filebeat.yml
output.logstash:
# The Logstash hosts
hosts: ["localhost:5044"]
ファイルを保存して閉じます。
Filebeatの機能は、Filebeat modulesで拡張できます。 このチュートリアルでは、systemモジュールを使用します。このモジュールは、一般的なLinuxディストリビューションのシステムログサービスによって作成されたログを収集して解析します。
有効にしましょう:
sudo filebeat modules enable system
次を実行すると、有効化および無効化されたモジュールのリストを表示できます。
sudo filebeat modules list
次のようなリストが表示されます。
OutputEnabled:
system
Disabled:
apache2
auditd
elasticsearch
icinga
iis
kafka
kibana
logstash
mongodb
mysql
nginx
osquery
postgresql
redis
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
次のような出力が表示されます。
Output2018-09-10T08:39:15.844Z INFO instance/beat.go:273 Setup Beat: filebeat; Version: 6.4.2
2018-09-10T08:39:15.845Z INFO elasticsearch/client.go:163 Elasticsearch url: http://localhost:9200
2018-09-10T08:39:15.845Z INFO pipeline/module.go:98 Beat name: elk
2018-09-10T08:39:15.845Z INFO elasticsearch/client.go:163 Elasticsearch url: http://localhost:9200
2018-09-10T08:39:15.849Z INFO elasticsearch/client.go:708 Connected to Elasticsearch version 6.4.2
2018-09-10T08:39:15.856Z 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-09-10T08:39:15.857Z INFO elasticsearch/client.go:163 Elasticsearch url: http://localhost:9200
2018-09-10T08:39:15.865Z INFO elasticsearch/client.go:708 Connected to Elasticsearch version 6.4.2
2018-09-10T08:39:15.865Z INFO kibana/client.go:113 Kibana url: http://localhost:5601
2018-09-10T08:39:45.357Z INFO instance/beat.go:659 Kibana dashboards successfully loaded.
Loaded dashboards
2018-09-10T08:39:45.358Z INFO elasticsearch/client.go:163 Elasticsearch url: http://localhost:9200
2018-09-10T08:39:45.361Z INFO elasticsearch/client.go:708 Connected to Elasticsearch version 6.4.2
2018-09-10T08:39:45.361Z INFO kibana/client.go:113 Kibana url: http://localhost:5601
2018-09-10T08:39:45.455Z 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 -XGET 'http://localhost:9200/filebeat-*/_search?pretty'
次のような出力が表示されます。
Output...
{
"took" : 32,
"timed_out" : false,
"_shards" : {
"total" : 3,
"successful" : 3,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : 1641,
"max_score" : 1.0,
"hits" : [
{
"_index" : "filebeat-6.4.2-2018.10.10",
"_type" : "doc",
"_id" : "H_bZ62UBB4D0uxFRu_h3",
"_score" : 1.0,
"_source" : {
"@version" : "1",
"message" : "Oct 10 06:22:36 elk systemd[1]: Reached target Local File Systems (Pre).",
"@timestamp" : "2018-10-10T08:43:56.969Z",
"host" : {
"name" : "elk"
},
"source" : "/var/log/syslog",
"input" : {
"type" : "log"
},
"tags" : [
"beats_input_codec_plain_applied"
],
"offset" : 296,
"prospector" : {
"type" : "log"
},
"beat" : {
"version" : "6.4.2",
"hostname" : "elk",
"name" : "elk"
}
}
},
...
出力に合計ヒット数が0と表示される場合、Elasticsearchは検索したインデックスの下にログをロードしていないため、エラーの設定を確認する必要があります。 期待どおりの出力を受け取ったら、次のステップに進みます。このステップでは、Kibanaのダッシュボードのいくつかをナビゲートする方法を確認します。
[[step-5 -—- exploring-kibana-dashboards]] ==ステップ5—Kibanaダッシュボードの探索
先にインストールしたWebインターフェースであるKibanaを見てみましょう。
Webブラウザーで、Elastic StackサーバーのFQDNまたはパブリックIPアドレスに移動します。 手順2で定義したログイン資格情報を入力すると、Kibanaホームページが表示されます。
左側のナビゲーションバーにあるDiscoverリンクをクリックします。 Discoverページで、事前定義されたfilebeat- *インデックスパターンを選択して、Filebeatデータを表示します。 デフォルトでは、過去15分間のすべてのログデータが表示されます。 ログイベントを含むヒストグラムと、以下のログメッセージが表示されます。
ここでは、ログを検索して参照したり、ダッシュボードをカスタマイズしたりできます。 ただし、Elastic Stackサーバーからsyslogを収集するだけなので、この時点ではそれほど多くはありません。
左側のパネルを使用して、Dashboardページに移動し、Filebeat Systemダッシュボードを検索します。 そこに到達したら、Filebeatのsystem
モジュールに付属するサンプルダッシュボードを検索できます。
たとえば、syslogメッセージに基づいて詳細な統計を表示できます。
また、sudo
コマンドを使用したユーザーとその時期を表示することもできます。
Kibanaには、グラフ化やフィルタリングなど、他にも多くの機能がありますので、気軽に探索してください。
結論
このチュートリアルでは、システムログを収集および分析するためにElastic Stackをインストールおよび構成する方法を学びました。 Beatsを使用してほぼすべてのタイプのログまたはインデックス付きデータをLogstashに送信できますが、Logstashフィルターを使用して解析および構造化すると、データが一貫した形式に変換されるため、データはさらに便利になります。 Elasticsearchで簡単に読み取ることができます。