はじめに
ログ管理のために、ELK Stackを使うことは良くあると思いますが、システム稼働情報をLogStashで管理してみようと思い、久々に設定をしてみようと思ったら、思いの他手間取ったのでまとめました。
通常、システム稼働情報はZabbixを使うことが多いのですが、管理するOSSを増やしたくないのでMetricbeatを採用しました。
対象のELK Stackのバージョンは8.15.0を使用しました。
ElasticsearchとKibanaはDocker composeを使って立ち上げました。
version: "3"
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:8.15.1
ports:
- 9200:9200
environment:
- discovery.type=single-node
- xpack.security.enabled=false
ulimits:
memlock:
soft: -1
hard: -1
kibana:
image: docker.elastic.co/kibana/kibana:8.15.1
environment:
ELASTICSEARCH_HOSTS: http://elasticsearch:9200
ports:
- 5601:5601
なお、本来はSSL証明書を準備する必要があるのですが、今回は作成するのが面倒なので全て平分で通信します。
本来は、準備すべきなのでEnterprise環境では必ず用意しましょう。
syslogの設定
syslogと呼んでいますが、実際はrsyslogを使用します。
rsyslogの設定は/etc/rsyslog.conf
と/etc/rsyslog.d
の中に配置されています。
今回は90-logstash.conf
としました。
以下の設定では、1ブロック目で*.*
とすることで全てのログを、2ブロック目でホスト名、ポートを指定します。
*.* @@localhost:31514
今回はLogstashの31514番ポートにsyslogの設定を送ります。
Logstashの導入
ドキュメントを参考に導入を行います。
ついでに、metricbeatの導入も済ませてしまいます。
curl -O /etc/apt/keyrings/elastic-keyring.asc -XGET https://artifacts.elastic.co/GPG-KEY-elasticsearch
echo deb [signed-by=/etc/apt/keyrings/elastic-keyring.asc] https://artifacts.elastic.co/packages/8.x/apt stable main | sudo tee /etc/apt/sources.list.d/elastic-8.x.list > /dev/null
sudo apt update && sudo apt install -y metricbeat logstash
Metricbeatの設定
/etc/metricbeat/metricbeat.yml
を編集します。
今回はLogstash経由でMetricbeatにログを上げます。
output.logstash
を追記します
基本的にデフォルト設定を使いますが、sslを無効にする設定だけは忘れずに実施します。
output.logstash:
enabled: true
# Logstashでリッスンするポート
hosts: ["localhost:5044"]
# Worker数
worker: 1
compression_level: 3
escape_html: false
ttl: 30s
loadbalance: false
pipelining: 2
slow_start: false
backoff.init: 1s
backoff.max: 60s
index: 'metricbeat'
# SSLを無効化
ssl.enabled: false
ssl.verification_mode: "none"
Logstashの設定
Logstashの設定は/etc/logstash
に配置されています。
まずpipelines.yml
を設定します。
ここには、パイプライン処理の一覧を記述します。
今回はsyslogとmetricbeatの2つのパイプラインを記述します。
- pipeline.id: metircbeat
pipeline.batch.size: 125
path.config: "/etc/logstash/conf.d/metricbeat.conf"
pipeline.workers: 1
- pipeline.id: syslog
pipeline.batch.size: 125
path.config: "/etc/logstash/conf.d/syslog.conf"
pipeline.workers: 1
metricbeatの設定
MetricbeatをLogstashで受けるための設定を行います。
Logstashのパイプライン設定は癖がありますが、簡単に説明します。
inputにmetricbeatが使用しているポート番号、outputにElasticsearchのホスト名をそれぞれ指定します。
また、複数台のサーバからログを上げる場合は、indexを分けるかfilterにadd_fieldで追加すると良いでしょう。
今回は仮想のホスト名としてexample01
を指定します。
input {
beats {
port => 5044
}
}
filter {
add_field => { "Hostname" => "example01" }
}
output {
elasticsearch {
hosts => ["http://127.0.0.1:9200"]
index => "log-syslog-%{+YYYY.MM.dd}"
ssl => false
ssl_certificate_verification => false
}
}
syslogの設定
syslogをLogstashで受けるための設定を行います。
基本的には、Metricbeatの時と同じですが、ポート設定だけrsyslogの設定時と同じポートを使用する点に注意しましょう。
input {
tcp {
host => "127.0.0.1"
port => 31514
type => rsyslog
}
}
filter {
add_field => { "Hostname" => "example01" }
}
output {
elasticsearch {
hosts => ["http://127.0.0.1:9200"]
index => "log-syslog-%{+YYYY.MM.dd}"
ssl => false
ssl_certificate_verification => false
}
以上の設定を終えたらKibanaからindexが増えていることを確認しましょう。
まとめ
今回はLogstashでsyslogとシステム稼働情報をアップしました。
grokを使えばログをより管理しやすい形態に整理することもできます。