Monitoringでログ表示

# はじめに

気が付くと、いろいろな機能が追加されているElastic Stackです。
今回はちょっと小さな機能ですが、ピリリとくる（かな？）。

# Monitoringでのログ表示

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

![Screenshot_2019-04-16 Stack Monitoring - Overview.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221612/0b557a5a-fa70-a7ab-bae3-3a55af2af8cf.png)

が、デフォルトではメッセージが表示されるだけで何も出てくれません。
書いてある通りに、ちゃんとFilebeatをセットアップして表示してみましょう。

## Filebeatの設定

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

```yaml: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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221612/9142914e-d0c5-da7e-0f93-e3f59c217e20.png)

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

Githubの[Issue](https://github.com/elastic/kibana/pull/31275)を見る限り、ワーニングは色違いで出してくれるようです。

## ログの表示

### Overviewの場合

<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221612/65e3fd8b-9f60-f988-c0c8-ce257ecce462.png width=50%">

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

![Screenshot_2019-04-16 Logs - Kibana(2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221612/d5570752-45df-7ec0-5752-6f98d5b9bde2.png)

### Nodeの場合

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

<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221612/de5ed4ee-978f-034d-e9da-dc669ad89848.png width=50%>

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

![Screenshot_2019-04-16 Logs - Kibana(1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221612/ea5bfeaa-2f8f-ac21-9b57-cdea1210c9c9.png)

### Indexの場合

![Screenshot_2019-04-16 Stack Monitoring - Elasticsearch - Indices - filebeat-7 0 0-2019 04 16-000001 - Overview.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221612/d87b5f21-b164-2e75-8ef4-aaf6a1b251f0.png)

Indexでフィルタリングされたログが表示されます。
Logs UIに飛んでみます。

![Screenshot_2019-04-16 Logs - Kibana.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221612/773a7e5a-f972-107c-5d2b-a20545afdc1d.png)

## コンテナへの組み込み

ElasticsearchをDockerなりのコンテナで起動すること、ありますよね。
そんな時にログを簡単に見れるように、Filebeatを組み込んでみます。
といっても、Elasticsearchのコンテナに入れちゃうのではなく、別コンテナに入れたFilebeatでログを読み込んでElasticsearchにログを投げ込みます。

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

```yaml: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にしています。

```yaml: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用のクラスタも運用したくなってきますね。
あとは、ほかの製品群もログが見れるようになるとうれしいかな。