はじめに
最近、ElasticStack関係の調査することが多く、毎回書くのも面倒なので一か所にまとめてみました。
今回構築する環境で以下のことを実行することができるようになります。
- syslog → Filebeat → Logstash → Elasticsearch → Kibana
- Metricbeat → Logstash → Elasticsearch → Kibana
- APM Server → Elasticsearch → Kibana
※Elastic APMはElasticStackには含まれていなかったかもしれませんが。
インストールでは、yumを利用する方法とrpmをダウンロードする方法がありますが、今回はrpmをダウンロードする方法で実施しています。
環境
使用した環境は以下のとおり。
サーバは1台に全てのアプリケーションをインストールしています。
少なくともFilebeatは通常別サーバにインストールすることになるので、その際は接続先のElasticsearch(もしくはLogstash)のIPアドレスの設定だけは実施する必要があります。
- CentOS 7.5
- Elasticsearch 7.8.0
- Kibana 7.8.0
- Metribeat 7.8.0
- Filebeat 7.8.0
- APM Server 7.8.0
OpenJDKのインストール
まず、OpenJDK 8をインストールします。
※Elasticsearch v7.8.0ではAdoptOpenJDK14が同梱されているので、そちらを利用することもできます。(/usr/share/elasticsearch/jdk/bin/java)
# yum install -y java-1.8.0-openjdk-devel
# java -version
openjdk version "1.8.0_252"
OpenJDK Runtime Environment (build 1.8.0_252-b09)
OpenJDK 64-Bit Server VM (build 25.252-b09, mixed mode)
JAVA_HOMEを設定し、PATHにJavaのパスを追加しています。
# echo "export JAVA_HOME=$(readlink -e $(which java)|sed 's:/bin/java::')" > /etc/profile.d/java.sh
# echo "PATH=\$PATH:\$JAVA_HOME/bin" >> /etc/profile.d/java.sh
# source /etc/profile
Elasticsearchのインストール
以下の公式サイトのドキュメントを参照しインストールを実施していきます。
以下のコマンドでElasticsearchをインストールします。
# curl -L -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.8.0-x86_64.rpm
# rpm -ivh elasticsearch-7.8.0-x86_64.rpm
Elasticsearchを外部からアクセスできるように設定します。
# vi /etc/elasticsearch/elasticsearch.yml
#network.host: 192.168.0.1
network.host: 0.0.0.0
transport.host: localhost
自動起動するように設定し、起動まで実行します。
# systemctl enable elasticsearch
# systemctl start elasticsearch
最後に動作確認。
# curl http://127.0.0.1:9200
{
"name" : "elasticserver1",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "ZUiSSmOETuOAnZp2Adz9dQ",
"version" : {
"number" : "7.8.0",
"build_flavor" : "default",
"build_type" : "rpm",
"build_hash" : "757314695644ea9a1dc2fecd26d1a43856725e65",
"build_date" : "2020-06-14T19:35:50.234439Z",
"build_snapshot" : false,
"lucene_version" : "8.5.1",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
ログと設定ファイルは以下のディレクトリになります。
- /var/log/elasticsearch/
- /etc/elasticsearch/
Kibanaのインストール
Elasticsearchのインストールが終わったら、次はKibanaをインストールします。
# wget https://artifacts.elastic.co/downloads/kibana/kibana-7.8.0-x86_64.rpm
# rpm -ivh kibana-7.8.0-x86_64.rpm
Kibanaを外部から接続できるように設定します。
# vi /etc/kibana/kibana.yml
#server.host: "localhost"
server.host: "0.0.0.0"
自動起動するように設定し、起動まで実行します。
# systemctl enable kibana
# systemctl start kibana
最後に動作確認。以下のURLをブラウザから開いて、Kibanaの画面が表示されることを確認します。
- http://[KibanaサーバーのIPアドレス]:5601
APM Serverのインストール
APM Serverのインストールを実施します。
まず、モジュールをダウンロードしインストールします。
# curl -L -O https://artifacts.elastic.co/downloads/apm-server/apm-server-7.8.0-x86_64.rpm
# rpm -ivh apm-server-7.8.0-x86_64.rpm
$ su - apm-server
$ apm-server setup --index-management
Index setup finished.
$ apm-server setup --pipelines
Loaded Ingest pipelines
APM Serverを外部からアクセスできるように設定します。
# vi /etc/apm-server/apm-server.yml
apm-server:
# Defines the host and port the server is listening on. Use "unix:/path/to.sock" to listen on a unix domain socket.
#host: "localhost:8200"
host: "0.0.0.0:8200"
自動起動するように設定し、起動まで実行します。
# systemctl enable apm-server
# systemctl start apm-server
最後に動作確認。
# curl -L http://localhost:8200
{
"build_date": "2020-06-14T17:10:16Z",
"build_sha": "06c58bf4e5b675d04314bf44961ffd6b0e13f544",
"version": "7.8.0"
}
Logstashをインストールする
Logstashをインストールします。
インストール手順は以下を参照。
# curl -L -O https://artifacts.elastic.co/downloads/logstash/logstash-7.8.0.rpm
# rpm -ivh logstash-7.8.0.rpm
以下のサイトからLogstashの最新版のURLを確認できます。
Logstashの設定は以下に作成します。
- /etc/logstash/conf.d
このディレクトリにFilebeatからログを受信し、Elasticsearchへ送信する設定を以下のように作成します。
# vi /etc/logstash/conf.d/syslog_test.conf
input {
beats {
port => "5044"
}
}
output {
elasticsearch {
hosts => ["localhost:9200"]
index => "syslogtest-%{+YYYY.MM.dd}"
}
}
Logstashを自動起動するように設定し、起動させます。
# systemctl start logstash
# systemctl enable logstash
Logstashの設定ファイルは以下になります。
- /etc/logstash/logstash.yml
Metricbeatのインストール
Metricbeatのインストールは以下の公式ドキュメントを参考に実施します。
まずはRPMをダウンロードし、インストールします。
# curl -L -O https://artifacts.elastic.co/downloads/beats/metricbeat/metricbeat-7.8.0-x86_64.rpm
# rpm -ivh metricbeat-7.8.0-x86_64.rpm
次にElasticsearchとKibanaのエンドポイントを設定します。
Kibanaのエンドポイントを設定すると、サンプルKibanaダッシュボードを使用することができます。
Elasticsearchへのインデックステンプレートの登録は自動で実行されます。
※今回は全てのアプリを同一サーバに構築しているためlocalhostを指定していますが、実際のホスト名(IPアドレス)を指定してください。
# vi /etc/metricbeat/metricbeat.yml
setup.kibana:
host: "localhost:5601"
output.elasticsearch:
hosts: ["localhost:9200"]
Metricbeatには、サンプルのKibanaダッシュボードがパッケージされており、以下のコマンドで作成することができます。
# metricbeat setup --dashboards
Loading dashboards (Kibana must be running and reachable)
Loaded dashboards
Metricbeatを自動起動するように設定し、起動させます。
# systemctl enable metricbeat
# systemctl start metricbeat
Kibanaで[Metrics]を選択し、メトリクスが取得できていることを確認します。
Filebeatのサンプルダッシュボードが作成されていることを確認するために、[Dashboard]を選択し、[Metricbeat XXX]というダッシュボードが一覧に表示されていることを確認します。
標準で取得されるOS(CPU/メモリ等)のメトリクスが不要な場合は以下のコマンドを実行した後、Metricbeatを再起動してください。
# metricbeat modules disable system
Disabled system
Metricbeatのログは以下に出力されます。
- /var/log/metricbeat/metricbeat
Filebeatの設定
以下のコマンドでインストールします。
# curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.8.0-x86_64.rpm
# rpm -ivh filebeat-7.8.0-x86_64.rpm
最新版のURLは以下から確認できます。
filebeat.ymlを変更し、syslogを読み込み、Logstashへ送信するように設定します(変更点のみ抜粋)。
syslogを扱う専用モジュールがありますが、今回は一般的なログの転送の確認をしたいだけなので使用していません。
※今回は全てのアプリを同一サーバに構築しているためlocalhostを指定していますが、実際のホスト名(IPアドレス)を指定してください。
送信先がElasticsearchの場合は、output.logstashをコメントアウトし、output.elasticsearchをアンコメントしてください。Filebeatではoutは一つしか指定できません。
# vi /etc/filebeat/filebeat.yml
- type: log
enabled: true
paths:
- /var/log/messages
#output.elasticsearch:
#hosts: ["localhost:9200"]
output.logstash:
hosts: ["localhost:5044"]
setup.kibana:
host: "localhost:5601"
同ファイルの最後にFilebeat自身のログ出力の設定を追加します。
これで「/var/log/filebeat」以下にログが出力されるようになります。
ログの設定は以下を参照。
# vi /etc/filebeat/filebeat.yml
logging.level: info
logging.to_files: true
logging.files:
path: /var/log/filebeat
rotateeverybytes: 10485760
name: filebeat
keepfiles: 7
permissions: 0644
setupコマンドでKibanaへ対してサンプルダッシュボードを作成することができます。
# filebeat setup
Filebeatを自動起動するように設定し、起動させます。
# systemctl enable filebeat
# systemctl start filebeat
Kibanaで[Logs]を選択し、ログが取得できていることを確認します。
[Settings]で対象のindexを表示対象に変更しておく必要があります。
Filebeatのサンプルダッシュボードが作成されていることを確認するために、[Dashboard]を選択し、[Filebeat XXX]というダッシュボードが一覧に表示されていることを確認します。
サンプルデータ
KibanaのHomeの真ん中ぐらいにある「Add sample data / Load a data set and a Kibana dashboard」を選択します。
サンプルデータとして、以下の3つが表示されますので好きなサンプルデータを選択します。
- Sample eCommerce orders
- Sample flight data
- Sample web logs
Filebeatで複数行ログを扱う
Filebeatで複数行ログを1ドキュメントとして扱うためには、複数行を判断するための設定を追加する必要があります。
Filebeatで複数行ログを扱う場合の設定については以下の公式ドキュメントに記載があります。
Javaのスタックトレースの場合は、filebeat.ymlに以下のような設定を追加します。
- type: log
multiline.pattern: '^[[:space:]]'
multiline.negate: false
multiline.match: after
json.message_key: message
ホワイトスペースで始まっている(multiline.pattern: ^[[:space:]], multiline.negate: false)連続した行が、前のマッチしない行の後(multiline.match: after)に追加されるという意味になります。
"json.message_key"は複数行となる項目を指定しています。(これが正しいのかわかっていませんが)