0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Logstashでsyslogとシステム稼働情報をElasticsearchにアップロードする

Posted at

はじめに

ログ管理のために、ELK Stackを使うことは良くあると思いますが、システム稼働情報をLogStashで管理してみようと思い、久々に設定をしてみようと思ったら、思いの他手間取ったのでまとめました。
通常、システム稼働情報はZabbixを使うことが多いのですが、管理するOSSを増やしたくないのでMetricbeatを採用しました。

対象のELK Stackのバージョンは8.15.0を使用しました。
ElasticsearchとKibanaはDocker composeを使って立ち上げました。

docker-compose.yaml
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ブロック目でホスト名、ポートを指定します。

90-logstash.conf
*.*    @@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を無効にする設定だけは忘れずに実施します。

/etc/metricbeat/metricbeat.yml

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つのパイプラインを記述します。

/etc/logstash/pipelines.yml
- 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を指定します。

/etc/logstash/conf.d/metricbeat.conf

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の設定時と同じポートを使用する点に注意しましょう。

/etc/logstash/conf.d/syslog.conf
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を使えばログをより管理しやすい形態に整理することもできます。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?