Ubuntu 18.04にElasticsearch、Logstash、Kibana(Elastic Stack)をインストールする方法
Ubuntu 18.04を使用していませんか?別のバージョンやディストリビューションを選択してください。
著者は「Write for DOnations」プログラムの一環として、寄付を受けるためにインターネットアーカイブを選びました。
紹介
Elastic Stack — 以前はELK Stackとして知られていた — は、Elasticによって制作されたオープンソースソフトウェアのコレクションで、あらゆるソースから生成されたログを検索、分析、視覚化することを可能にする、集中ログ管理として知られる実践です。集中ログ管理は、サーバーやアプリケーションに問題を特定しようとする際に非常に便利で、すべてのログを1つの場所から検索できるためです。また、特定の時間枠内におけるログを相関させることで、複数のサーバーにまたがる問題を特定することも可能なため、有用です。
Elastic Stackには4つの主要なコンポーネントがあります。
- Elasticsearch:収集したすべてのデータを保存する分散型のRESTful検索エンジンです。
- Logstash: Elastic Stackのデータ処理コンポーネントで、受信データをElasticsearchに送信します。
- Kibana: ログを検索し可視化するためのウェブインターフェースです。
- ビート: 数百台または数千台のマシンからLogstashまたはElasticsearchにデータを送信できる、軽量で単目的のデータシッパーです。
このチュートリアルでは、Ubuntu 18.04サーバーにElastic Stackをインストールします。Filebeatを含むElastic Stackのすべてのコンポーネントをインストールする方法を学びます。Filebeatはログやファイルを転送し集中化するために使用されるBeatです。そして、それらを設定してシステムログを収集し可視化します。さらに、Kibanaは通常localhostでのみ利用可能なため、Nginxを使用してプロキシを設定し、ウェブブラウザからアクセスできるようにします。これらすべてのコンポーネントを単一のサーバーにインストールし、それを私たちのElastic Stackサーバーと呼びます。
注意: Elastic Stackをインストールする際は、スタック全体で同じバージョンを使用する必要があります。本チュートリアルでは、執筆時点での最新バージョンであるElasticsearch 7.6.1、Kibana 7.6.1、Logstash 7.6.1、およびFilebeat 7.6.1をインストールします。
前提条件
このチュートリアルを完了するには、以下が必要です:
Ubuntu 18.04の初期サーバー設定ガイドに従って設定されたUbuntu 18.04サーバーで、sudo権限を持つ非rootユーザーと
ufwで構成されたファイアウォールが含まれています。Elastic Stackサーバーが必要とするCPU、RAM、およびストレージの量は、収集するログの量に依存します。このチュートリアルでは、Elastic Stackサーバーとして以下の仕様のVPSを使用します:- OS: Ubuntu 18.04
- RAM: 4GB
- CPU: 2
ElasticsearchとLogstashに必要なJava 8がサーバーにインストールされていることを確認してください。Java 9はサポートされていません。これをインストールするには、Ubuntu 18.04にJava 8をインストールする方法に関するガイドの「Oracle JDKのインストール」セクションに従ってください。
あなたのサーバーにNginxがインストールされており、後でこのガイドでKibanaのリバースプロキシとして設定します。このセットアップについては、Ubuntu 18.04にNginxをインストールする方法に関するガイドに従ってください。
さらに、Elastic Stackはサーバーに関する貴重な情報にアクセスするために使用されるため、不正なユーザーにアクセスされてほしくない情報でもあります。そのため、TLS/SSL証明書をインストールしてサーバーを安全に保つことが重要です。これはオプションですが、強く推奨されます。
しかし、このガイドの過程で最終的にNginxサーバーブロックに変更を加えるため、Ubuntu 18.04のLet’s Encryptガイドはこのチュートリアルの第2ステップの終わりに実施する方が合理的でしょう。それを考慮して、サーバーにLet’s Encryptを設定する予定がある場合は、設定する前に以下の準備が必要です:
完全修飾ドメイン名 (FQDN)。このチュートリアルでは、
example.comを通じて説明します。Namecheapでドメイン名を購入するか、Freenomで無料のものを手に入れるか、お好きなドメインレジストラを使用できます。サーバー用に設定された以下の両方のDNSレコードがあります。これらを追加する方法の詳細については、DigitalOcean DNSの紹介を参照してください。
example.comがあなたのサーバーの公開IPアドレスを指すAレコード。
www.example.comがあなたのサーバーのパブリックIPアドレスを指しているAレコード。
ステップ 1 — Elasticsearch のインストールと設定
Elastic Stackのコンポーネントは、Ubuntuのデフォルトのパッケージリポジトリにはありません。しかし、Elasticのパッケージソースリストを追加することで、APTを使ってインストールすることができます。
Elastic Stackのすべてのパッケージは、システムをパッケージの偽造から保護するために、Elasticsearchの署名キーで署名されています。キーを使用して認証されたパッケージは、パッケージマネージャによって信頼されると見なされます。このステップでは、Elasticsearchの公開GPGキーをインポートし、ElasticsearchをインストールするためにElasticパッケージのソースリストを追加します。
まず、以下のコマンドを実行してElasticsearchの公開GPGキーをAPTにインポートします:
- wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
次に、APTが新しいソースを探すためのsources.list.dディレクトリにElasticソースリストを追加します:
- echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list
次に、APTが新しいElasticソースを読み取るようにパッケージリストを更新してください:
- sudo apt update
次に、このコマンドでElasticsearchをインストールします:
- sudo apt install elasticsearch
Elasticsearchのインストールが完了したら、お好みのテキストエディタを使用してElasticsearchのメイン設定ファイルelasticsearch.ymlを編集します。ここではnanoを使用します:
- sudo nano /etc/elasticsearch/elasticsearch.yml
注意: Elasticsearchの設定ファイルはYAML形式であるため、インデントが非常に重要です!このファイルを編集する際には、余分なスペースを追加しないようにしてください。
Elasticsearchは、ポート9200でどこからでもトラフィックを待ち受けます。外部からのアクセスを制限して、データを読み取ったり、REST APIを通じてElasticsearchクラスタをシャットダウンしたりするのを防ぐ必要があります。network.hostを指定する行を見つけて、そのコメントを外し、値をlocalhostに置き換えて、次のようにします:
. . .
network.host: localhost
. . .
エディタを閉じるには、elasticsearch.ymlを保存して、CTRL+Xを押し、次にY、最後にENTERを押します。nanoを使用している場合です。その後、systemctlを使用してElasticsearchサービスを開始します。
- sudo systemctl start elasticsearch
次に、サーバーが起動するたびにElasticsearchを起動できるように、次のコマンドを実行します:
- sudo systemctl enable elasticsearch
Elasticsearchサービスが実行中かどうかを確認するには、HTTPリクエストを送信します:
- curl -X GET "localhost:9200"
あなたのローカルノードに関する基本情報を示すレスポンスが表示されます。その内容は次のようになります:
{
"name" : "ElasticSearch",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "SMYhVWRiTwS1dF0pQ-h7SQ",
"version" : {
"number" : "7.6.1",
"build_flavor" : "default",
"build_type" : "deb",
"build_hash" : "aa751e09be0a5072e8570670309b1f12348f023b",
"build_date" : "2020-02-29T00:15:25.529771Z",
"build_snapshot" : false,
"lucene_version" : "8.4.0",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
Elasticsearchが稼働しているので、次のElastic StackのコンポーネントであるKibanaをインストールしましょう。
ステップ2 — Kibanaダッシュボードのインストールと構成
公式ドキュメントによると、KibanaはElasticsearchをインストールした後にのみインストールするべきです。この順番でインストールすることで、各製品が依存するコンポーネントが正しく配置されることが保証されます。
以前のステップでElasticパッケージソースを追加したので、残りのElastic Stackコンポーネントをaptを使用してインストールできます。
- sudo apt install kibana
次に、Kibanaサービスを有効にして開始します:
- sudo systemctl enable kibana
- sudo systemctl start kibana
Kibanaはlocalhostのみでリッスンするように設定されているため、外部アクセスを可能にするためにリバースプロキシを設定する必要があります。この目的のためにNginxを使用しますが、既にサーバーにインストールされているはずです。
まず、opensslコマンドを使用して、KibanaのWebインターフェースにアクセスするために使用する管理者Kibanaユーザーを作成します。このアカウントには例としてkibanaadminという名前を付けますが、より安全性を高めるために、推測が難しい非標準の名前を選ぶことをお勧めします。
次のコマンドは、管理用のKibanaユーザーとパスワードを作成し、それらをhtpasswd.usersファイルに保存します。あなたはNginxをこのユーザー名とパスワードを要求するように設定し、今しばらくこのファイルを読み取ることになります:
- echo "kibanaadmin:`openssl passwd -apr1`" | sudo tee -a /etc/nginx/htpasswd.users
プロンプトでパスワードを入力して確認してください。このログイン情報を記憶するかメモしてください。Kibanaウェブインターフェースにアクセスするために必要になります。
次に、Nginxサーバーブロックファイルを作成します。例として、このファイルをexample.comと呼びますが、あなたのファイルにはより説明的な名前をつけると良いかもしれません。たとえば、このサーバーにFQDNとDNSレコードが設定されている場合、このファイルにFQDNの名前を付けることができます:
- sudo nano /etc/nginx/sites-available/example.com
次のコードブロックをファイルに追加し、必ずexample.comをサーバーのFQDNまたはパブリックIPアドレスに合わせて更新してください。このコードは、Nginxを設定してサーバーのHTTPトラフィックをKibanaアプリケーション(localhost:5601でリスニング)に転送します。また、Nginxにhtpasswd.usersファイルを読み取らせ、基本認証を要求するように設定します。
必要条件のNginxチュートリアルを最後まで進めた場合は、すでにこのファイルを作成し、いくつかの内容を入力している可能性があることに注意してください。その場合、以下の内容を追加する前に、ファイル内の既存のすべての内容を削除してください:
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
出力にエラーが報告された場合は、設定ファイルに追加した内容が正しく追加されたかを再確認してください。出力に構文は正常ですと表示されたら、Nginxサービスを再起動してください:
- sudo systemctl restart nginx
初期のサーバーセットアップガイドに従った場合、UFWファイアウォールが有効になっているはずです。Nginxへの接続を許可するために、ルールを調整するには次のように入力できます:
- sudo ufw allow 'Nginx Full'
注意: もしあなたが前提の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
このステータスページはサーバーのリソース使用状況に関する情報を表示し、インストールされているプラグインのリストを示します。
注: 前提条件のセクションで述べたように、サーバーでSSL/TLSを有効にすることをお勧めします。Ubuntu 18.04のNginx用に無料のSSL証明書を取得するために、今このチュートリアルに従うことができます。SSL/TLS証明書を取得した後は、戻ってこのチュートリアルを完了することができます。
Kibanaのダッシュボードが設定されたので、次のコンポーネントであるLogstashをインストールしましょう。
ステップ3 — Logstashのインストールと設定
BeatsがElasticsearchデータベースに直接データを送信することは可能ですが、データを処理するためにLogstashを使用することをお勧めします。これにより、異なるソースからデータを収集し、共通のフォーマットに変換し、別のデータベースにエクスポートすることができます。
このコマンドでLogstashをインストールします:
- sudo apt install logstash
Logstashをインストールした後は、設定に進むことができます。Logstashの設定ファイルはJSON形式で書かれており、/etc/logstash/conf.dディレクトリにあります。設定を行う際、Logstashをパイプラインと考えると便利です。データが一方の端から入り、何らかの方法で処理され、最終的に宛先(この場合、宛先はElasticsearch)に出力されます。Logstashのパイプラインには、inputとoutputという2つの必須要素と、1つのオプション要素filterがあります。入力プラグインはソースからデータを取得し、フィルタープラグインがデータを処理し、出力プラグインがデータを宛先に書き込みます。
02-beats-input.confという設定ファイルを作成し、そこにFilebeatの入力設定を行います:
- sudo nano /etc/logstash/conf.d/02-beats-input.conf
次のinput構成を挿入してください。これはbeats入力を指定し、TCPポート5044で待機します。
input {
beats {
port => 5044
}
}
ファイルを保存して閉じます。次に、10-syslog-filter.confという名前の設定ファイルを作成します。ここでは、システムログ、つまりsyslogsのフィルターを追加します。
- sudo nano /etc/logstash/conf.d/10-syslog-filter.conf
以下のsyslogフィルター設定を挿入してください。この例のシステムログ構成は、公式のElasticドキュメントから取得したものです。このフィルターは、受信したシステムログをパースして構造化し、事前定義されたKibanaダッシュボードで使用できるようにするために使用されます。
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設定を挿入してください。本質的に、この出力はLogstashがElasticsearchにBeatsデータを保存するように設定し、Elasticsearchはlocalhost:9200で実行されています。使用されるインデックスは、使用されたBeatの名前になります。このチュートリアルで使用されているBeatはFilebeatです。
output {
elasticsearch {
hosts => ["localhost:9200"]
manage_template => false
index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
}
}
ファイルを保存して閉じてください。
他のアプリケーションがFilebeat入力を使用する場合のフィルターを追加したい場合は、ファイル名が入力と出力の設定の間でソートされるように、ファイル名を2桁の数字(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から利用可能なBeatsは次の通りです:
- Filebeat: ログファイルを収集して送信します。
- Metricbeat: あなたのシステムとサービスからメトリクスを収集します。
- Packetbeat: ネットワークデータを収集し分析します。
- Winlogbeat: Windowsイベントログを収集します。
- Auditbeat: Linux監査フレームワークデータを収集し、ファイルの整合性を監視します。
- ハートビート:アクティブプロービングでサービスの可用性を監視します。
このチュートリアルでは、Filebeatを使用してローカルログをElastic Stackに転送します。
aptを使用してFilebeatをインストールします:
- sudo apt install filebeat
次に、FilebeatをLogstashに接続するように設定します。ここでは、Filebeatに付属するサンプル設定ファイルを修正します。
Filebeatの設定ファイルを開いてください:
- sudo nano /etc/filebeat/filebeat.yml
注: Elasticsearchと同様に、Filebeatの設定ファイルはYAML形式です。つまり、適切なインデントが重要であるため、これらの指示に示されているスペースの数を必ず使用してください。
Filebeat は多数の出力をサポートしていますが、通常はイベントを直接 Elasticsearch に送信するか、追加の処理のために Logstash に送信します。このチュートリアルでは、Filebeat によって収集されたデータに対して追加の処理を実行するために Logstash を使用します。Filebeat は直接 Elasticsearch にデータを送信する必要がないため、その出力を無効にしましょう。そのために、output.elasticsearch セクションを見つけ、次の行の前に # を付けてコメントアウトしてください。
...
#output.elasticsearch:
# Array of hosts to connect to.
#hosts: ["localhost:9200"]
...
次に、output.logstash セクションを設定します。output.logstash: および hosts: ["localhost:5044"] の行のコメントを外すために、# を削除します。これにより、Filebeat は Elastic Stack サーバーのポート 5044 で Logstash に接続するように構成されます。以前に Logstash 入力を指定したポートです:
output.logstash:
# The Logstash hosts
hosts: ["localhost:5044"]
ファイルを保存して閉じてください。
Filebeatの機能は、Filebeatモジュールによって拡張できます。このチュートリアルでは、一般的なLinuxディストリビューションのシステムログサービスによって作成されたログを収集し解析するシステムモジュールを使用します。
それを有効にしましょう:
- sudo filebeat modules enable system
有効および無効なモジュールの一覧は、次のコマンドを実行することで確認できます:
- sudo filebeat modules list
次のようなリストが表示されます:
Enabled:
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にロードします。Elasticsearchインデックスは、類似の特性を持つドキュメントのコレクションです。インデックスは名前で識別され、その名前は様々な操作を行う際にインデックスを参照するために使用されます。新しいインデックスが作成されると、インデックステンプレートは自動的に適用されます。
テンプレートを読み込むには、次のコマンドを使用してください:
- sudo filebeat setup --template -E output.logstash.enabled=false -E 'output.elasticsearch.hosts=["localhost:9200"]'
Loaded 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
このような出力が表示されます:
2018-09-10T08:39:15.844Z INFO instance/beat.go:273 Setup Beat: filebeat; Version: 7.6.1
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 7.6.1
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 7.6.1
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 7.6.1
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'
このような出力が表示されます:
...
{
"took" : 1,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 10000,
"relation" : "gte"
},
"max_score" : 1.0,
"hits" : [
{
"_index" : "filebeat-7.6.1-2020.03.22-000001",
"_type" : "_doc",
"_id" : "_vafAnEB9n8Ibpfym4VS",
"_score" : 1.0,
"_source" : {
"agent" : {
"hostname" : "ElasticSearch",
"id" : "ee9d1a5d-75a7-4283-a126-ee90c1455173",
"type" : "filebeat",
"ephemeral_id" : "b927d9fb-500a-43ab-a20c-598d55c080ac",
"version" : "7.6.1"
},
"process" : {
"name" : "kernel"
},
"log" : {
"file" : {
"path" : "/var/log/syslog"
},
"offset" : 97048
},
"fileset" : {
"name" : "syslog"
},
...
出力に合計ヒット数が0と表示される場合、Elasticsearchは検索したインデックスの下にログを読み込んでいないため、設定にエラーがないか確認する必要があります。期待される出力を受け取った場合は、次のステップに進み、Kibanaのダッシュボードのいくつかを移動する方法を見ていきます。
ステップ5 — Kibanaダッシュボードの探索
先ほどインストールしたウェブインターフェースであるKibanaを見てみましょう。
ウェブブラウザで、Elastic StackサーバーのFQDNまたはパブリックIPアドレスにアクセスします。ステップ2で定義したログイン資格情報を入力すると、Kibanaのホームページが表示されます:
左側のナビゲーションバーのDiscoverリンクをクリックします。Discoverページでは、事前定義されたfilebeat-*インデックスパターンを選択して、Filebeatデータを表示します。デフォルトでは、過去15分間のすべてのログデータが表示されます。ログイベントのヒストグラムと、下にいくつかのログメッセージが表示されます:
ここでは、ログを検索してブラウズしたり、ダッシュボードをカスタマイズしたりできます。ただし、この時点では、Elastic Stackサーバーからのsyslogしか収集していないため、あまり多くの情報はありません。
左側のパネルを使用してダッシュボードページに移動し、Filebeat Systemダッシュボードを検索します。そこに到達したら、Filebeatのsystemモジュールに付属するサンプルダッシュボードを検索できます。
例えば、syslog メッセージに基づいて詳細な統計を表示できます:
どのユーザーがsudoコマンドを使ったか、いつ使ったかを確認することもできます:
Kibanaには、グラフ作成やフィルタリングなどの多くの他の機能があるので、自由に探検してください。
結論
このチュートリアルでは、システムログを収集および分析するためにElastic Stackをインストールおよび構成する方法を学びました。Beatsを使用してLogstashにほぼすべての種類のログやインデックスデータを送信できることを覚えておいてください。ただし、データをLogstashフィルタで解析して構造化することで、データの有用性が高まり、Elasticsearchが簡単に読み取れる一貫した形式に変換されます。





