はじめに
気が付くと、いろいろな機能が追加されているElastic Stackです。
今回はちょっと小さな機能ですが、ピリリとくる(かな?)。
Monitoringでのログ表示
Monitoring機能では各ノードやインデックスのメトリックが表示されていましたが、Infra AppのLogsと連携してログを表示する機能が追加されました。
が、デフォルトではメッセージが表示されるだけで何も出てくれません。
書いてある通りに、ちゃんとFilebeatをセットアップして表示してみましょう。
Filebeatの設定
設定は、こんな感じで。
Elasticsearchが乗っているサーバにFilebeatを入れます。今回はMonitoring用クラスタがあるわけではないので、そのままローカルのElasticsearchに送り込みます。
filebeat.config:
modules:
path: /etc/filebeat/modules.d/*.yml
module: elasticsearch
output.elasticsearch:
hosts: ["localhost:9200"]
この設定で起動すると、以下のような画面が出てきます。
(さっきとはバージョン違いますが、まぁ、お茶目ってことで)
GithubのIssueを見る限り、ワーニングは色違いで出してくれるようです。
ログの表示
Overviewの場合
ここで表示されるのは、最新の10件だけです。ログの下にはLogs UIへのリンクもあるので、全部見たければそちらに移動します。
押すとLogs UIにとんで、Cluster UUIDでフィルタリングされたログが表示されます。
Nodeの場合
Overviewと同様に、ログが表示されます。ここでは、表示されているノードに関連したものが表示されます。
Logs UIにとんでみると、ちゃんとフィルタリングされます。
Indexの場合
Indexでフィルタリングされたログが表示されます。
Logs UIに飛んでみます。
コンテナへの組み込み
ElasticsearchをDockerなりのコンテナで起動すること、ありますよね。
そんな時にログを簡単に見れるように、Filebeatを組み込んでみます。
といっても、Elasticsearchのコンテナに入れちゃうのではなく、別コンテナに入れたFilebeatでログを読み込んでElasticsearchにログを投げ込みます。
docker-compose.ymlとfilebeat.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.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用のクラスタも運用したくなってきますね。
あとは、ほかの製品群もログが見れるようになるとうれしいかな。