Edited at

Monitoringでログ表示


はじめに

気が付くと、いろいろな機能が追加されているElastic Stackです。

今回はちょっと小さな機能ですが、ピリリとくる(かな?)。


Monitoringでのログ表示

Monitoring機能では各ノードやインデックスのメトリックが表示されていましたが、Infra AppのLogsと連携してログを表示する機能が追加されました。

Screenshot_2019-04-16 Stack Monitoring - Overview.png

が、デフォルトではメッセージが表示されるだけで何も出てくれません。

書いてある通りに、ちゃんとFilebeatをセットアップして表示してみましょう。


Filebeatの設定

設定は、こんな感じで。

Elasticsearchが乗っているサーバにFilebeatを入れます。今回はMonitoring用クラスタがあるわけではないので、そのままローカルのElasticsearchに送り込みます。


filebeat.yml

filebeat.config:

modules:
path: /etc/filebeat/modules.d/*.yml
module: elasticsearch
output.elasticsearch:
hosts: ["localhost:9200"]

この設定で起動すると、以下のような画面が出てきます。

Screenshot_2019-04-16 Stack Monitoring - Overview(1).png

(さっきとはバージョン違いますが、まぁ、お茶目ってことで)

GithubのIssueを見る限り、ワーニングは色違いで出してくれるようです。


ログの表示


Overviewの場合

ここで表示されるのは、最新の10件だけです。ログの下にはLogs UIへのリンクもあるので、全部見たければそちらに移動します。

押すとLogs UIにとんで、Cluster UUIDでフィルタリングされたログが表示されます。

Screenshot_2019-04-16 Logs - Kibana(2).png


Nodeの場合

Overviewと同様に、ログが表示されます。ここでは、表示されているノードに関連したものが表示されます。

Logs UIにとんでみると、ちゃんとフィルタリングされます。

Screenshot_2019-04-16 Logs - Kibana(1).png


Indexの場合

Screenshot_2019-04-16 Stack Monitoring - Elasticsearch - Indices - filebeat-7 0 0-2019 04 16-000001 - Overview.png

Indexでフィルタリングされたログが表示されます。

Logs UIに飛んでみます。

Screenshot_2019-04-16 Logs - Kibana.png


コンテナへの組み込み

ElasticsearchをDockerなりのコンテナで起動すること、ありますよね。

そんな時にログを簡単に見れるように、Filebeatを組み込んでみます。

といっても、Elasticsearchのコンテナに入れちゃうのではなく、別コンテナに入れたFilebeatでログを読み込んでElasticsearchにログを投げ込みます。

docker-compose.ymlとfilebeat.ymlを、以下のようにして作って見ます。


docker-compose.yml

version: '2'

services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.1.0-SNAPSHOT
container_name: elasticsearch4
environment:
- cluster.name=docker-cluster
- node.name=node-1
- cluster.initial_master_nodes=node-1
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
- path.repo=/usr/share/elasticsearch/snapshots
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- esdata1:/usr/share/elasticsearch/data
ports:
- 9204:9200
networks:
- esnet
kibana:
image: docker.elastic.co/kibana/kibana:7.1.0-SNAPSHOT
environment:
- ELASTICSEARCH_HOSTS=http://elasticsearch4:9200
container_name: kibana4
ports:
- 5605:5601
networks:
- esnet
beats4:
image: docker.elastic.co/beats/filebeat:7.1.0-SNAPSHOT
user: root
environment:
- ELASTICSEARCH_CONTAINER_NAME=elasticsearch4
- ELASTICSEARCH_HOSTS=http://elasticsearch4:9200
- KIBANA_HOST=http://kibana4:5601
volumes:
- /var/lib/docker/containers:/var/lib/docker/containers:ro
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./filebeat.yml:/usr/share/filebeat/filebeat.yml
networks:
- esnet

volumes:
esdata1:
driver: local

networks:
esnet:


ホストのdocker関連ディレクトリを参照する権限が必要なので、Filebeatの起動ユーザをrootにしています。


filebeat.yml

filebeat.autodiscover:

providers:
- type: docker
labels.dedot: true
templates:
- condition:
contains:
docker.container.name: ${ELASTICSEARCH_CONTAINER_NAME:elasticsearch}
config:
- module: elasticsearch
server:
enabled: true
input:
type: docker
containers.ids:
- "${data.docker.container.id}"
setup.kibana:
host: "${KIBANA_HOST:kibana:5601}"
output.elasticsearch:
hosts: '${ELASTICSEARCH_HOSTS:elasticsearch:9200}'


さいごに

こんな感じで、ログも表示されるとなると、Monitoring用のクラスタも運用したくなってきますね。

あとは、ほかの製品群もログが見れるようになるとうれしいかな。