Elasticsearch + Kibana + Logstash + Filebeat でシスログ監視 [7.x]


概要

シスログ監視をElasticsearch + Kibana + + Logstash + Filebeat を一括で行って見た際の実行ログ

公式リンク

ELASTIC STACKについて

Wikiより

wiki
ElasticsearchはLucene基盤の分散処理マルチテナント対応検索エンジンである。
オープンソースソフトウェアだが、現在はオランダ・アムステルダムに本社を置くElastic社が中心になって開発が進められている[1]。
なお「Elastic Search」といったように間に空白を入れる・「search」の頭を大文字にするといった表記は誤り
(ただしVer.1.0.0リリース前にはそのような表記も混在していた)

各ソフトウェアについての概要と実装言語

beats 概要 言語
elasticsearch 分散型RESTful検索エンジン Java
kibana ブラウザーベースの分析および検索ダッシュボード JavaScript
Filebeat ログファイルの収集 Go
Metricbeat CPU,メモリ等の情報収集 Go
Packetbeat パケット情報の収集 Go
Winlogbeat Windowsのイベントログの収集 Go
Auditbeat 監査データの収集 Go
Heartbeat リモートから稼働状況の監視 Go
logstash サーバー側のデータ処理パイプライン Ruby

簡単な用語まとめ

beats 概要 参考
cluster 同一の名前を持つnodeの集合
index RDBにおけるデータベース
type RDBにおけるテーブル
field RDBにおけるカラム
document RDBにおけるレコード
mapping RDBにおけるスキーマ定義
node elasticsearchインスタンスを実行している単位

環境

$ uname -r
3.10.0-957.el7.x86_64

$ cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)

デフォルトポート

今回は下記のように設定しています。
既に使用済みの場合は適宜変更してください

プロセス ポート番号
Elastisearch 9200
Kibana 5201
Logstash 5044

構築するイメージ

インストール前準備

# Javaインストール
$ yum search java-1.8.0-openjdk
$ yum -y install java-1.8.0-openjdk
$ export JAVA_HOME=/usr/bin/java

# リポジトリ登録
$ rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
$ vi /etc/yum.repos.d/elasticsearch.repo
[elasticsearch-7.x]
name=Elasticsearch repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

インストール

Elasticsearchインストール

GitHub : elastic/elasticsearch

# インストール
$ yum install -y elasticsearch

# 外部からアクセスできるように設定
$ vim /etc/elasticsearch/elasticsearch.yml
network.host: 0.0.0.0
http.port: 9200

# Elasticsearch起動/確認
$ systemctl enable elasticsearch.service
$ systemctl start elasticsearch.service
$ systemctl status elasticsearch.service
$ curl [IPアドレス]:9200

Kibanaインストール

GitHub : elastic/kibana

# インストール
$ yum install -y kibana

# 外部からアクセスできるように設定
$ vim /etc/kibana/kibana.yml
server.host: "[IPアドレス]"

# Kibana起動/確認
$ systemctl enable kibana.service
$ systemctl start kibana.service
$ systemctl status kibana.service
$ curl -XGET 'http://[IPアドレス]:9200/filebeat-*/_search?pretty'

Logstashインストール

elastic/logstash

# インストール
$ yum -y install logstash

# フィルター用のファイルを作成
$ vim /etc/logstash/conf.d/01-syslog.conf
input {
  beats {
    port => "5044"
    type => "beats"
    }
}

output {
  elasticsearch {
    hosts => ["[IPアドレス]9200"]
    index => "squid-%{+YYYY.MM}"
  }
}

# サービス起動/確認
$ systemctl start logstash
$ systemctl status logstash

# ログを監視
tail -f /var/log/logstash/logstash-plain.log

Filebeatインストール (監視対象ノード)

GitHub : elastic/beats/filebeat

# インストール
$ yum -y install filebeat

# syslogを収集するように設定
$ vim /etc/filebeat/filebeat.yml
filebeat.inputs:
- type: syslog
  protocol.udp:
    host: "192.168.1.238:9000"

- type: log
  enabled: false
  paths:
    - /var/log/messages

# Kibana連携
$ vim /etc/kibana/kibana.yml
setup.kibana:
  host: "[IPアドレス]:5601"

# Elasticsearch連携
$ vim /etc/kibana/kibana.yml
output.elasticsearch:
  hosts: ["[IPアドレス]:9200"]

# 実行
$ filebeat setup
$ systemctl start filebeat

Metricbeat

elastic/beats/metricbeat

# インストール
$ yum -y install metricbeat

# 設定ファイル編集
setup.kibana:
  host: "[IPアドレス]:5601"
output.elasticsearch:
  hosts: ["[IPアドレス]:9200"]

# 実行
$ metricbeat setup
$ systemctl start metricbeat
$ systemctl status metricbeat

logを送信してみる

動作確認するためのコマンドです。

# ログファイルへ追記する
$ logger "test log"

# pingでネットワーク通信を実行
$ ping -s 1M 192.168.179.10

上記実行後にKibanaからログが見れれば動作成功。

イメージ

メトリクス

ログ検索

apacheモジュール

beatにあるapacheモジュールを使うことでアクセスログやアクセス元の地域を可視化することができます。
また、ブラウザの種類やアクセス数なども特別な設定をせずにみることもできます。

# モジュールを有効化
$ filebeat modules enable apache2

# モジュールリストを表示
$ filebeat modules list

# 設定ファイル
$ vim /etc/filebeat/modules.d/apache2.yml
- module: apache2
  # Access logs
  access:
    enabled: true
    var.paths:
      - /var/log/httpd/access_log

  # Error logs
  error:
    enabled: true
    var.paths:
      - /var/log/httpd/error_log

# サービス再起動
$ systemctl restart filebeat

Index Lifecycle Policies

ここまでの設定のままだとログが無限に溜まってく一方です。
そこで削除するようなライフサイクルポリシーを定義します。

kibanaを開き Management > Index Lifecycle Policies > Create Policyを選択
ここで「Hot phase」、「Warm phase」、「Cold phase」、「Delete phase」とあります。
詳しい説明は下記をご参照ください。
ここでは削除までの定義としてDelete phaseに下記のように設定します。

Optimizing Elasticsearch – Part 2: Index Lifecycle Management

上記の意味は4日前に作成されたインデックスを削除するといった意味です。
そのあとは1階層上へ戻り下記のように選択します。
そこでmetricbeatのログやfilebeatのログなどこのポリシーを適用したいログを選択してください。

参考記事

はじめての Elasticsearch
Filebeat にモジュール機能が追加され、ログ可視化が簡単になりました
Kibanaで簡単! サクサク ビジュアライズしよう!
Filebeatの性能チューニングポイントまとめ

参考スライド

アプリケーション(パフォーマンス) 監視入門 - Elastic編
ElasticSearch+Kibanaでログデータの検索と視覚化を実現するテクニックと運用ノウハウ