Elasticsearch
Logstash

LogstashのMonitoring API を使って、Logstashを可視化してみた。

この記事はElastic stack Advent Calendar 2017の12/14分の記事です。

みなさん、初めまして。
fujii(@ZooBonta) と申します。

今回は、Logstash 5.0から利用可能になった、
Monitoring API を使って、Logstashを可視化してみようと思います。

環境情報

  • OS
    • Windows 10
  • Elasticsearch/Logstash
    • Ver 6.0.1

目的

Logstash のMonitoring APIを使って、Logstashを可視化します。

Monitoring API を使ってみたかっただけので、
「そんなの、Metricbeats使えば、いいじゃん」とかは言わないでください。。。

Monitoring APIとは?

Ver5 系から入った、Logstashの監視用APIです。

大きく、以下の4つに分類されます。
1. Node Info API:Logstashのノードに関する情報を扱うAPI
2. Plugins Info API:Logstashにインストールしたプラグインを扱うAPI
3. Node Stats API:Logstashの統計情報を扱うAPI
4. Hot Threads API:Logstashの起動中スレッドの情報を扱うAPI

さっそく、使ってみましょう。

まずは、Node Stats Info APIを使って、jvmの値を見てみます。

curl -X GET http://localhost:9600/_node/stats/jvm?pretty

以下の値が返ってきました。

{
  "host" : "my-host",
  "version" : "6.0.1",
  "http_address" : "127.0.0.1:9600",
  "id" : "b780ef4e-d70f-4919-a841-6b15caeed834",
  "name" : "my-host",
  "jvm" : {
    "threads" : {
      "count" : 28,
      "peak_count" : 32
    },
    "mem" : {
      "heap_used_percent" : 28,
      "heap_committed_in_bytes" : 1038876672,
      "heap_max_in_bytes" : 1038876672,
      "heap_used_in_bytes" : 299934992,
      "non_heap_used_in_bytes" : 155144224,
      "non_heap_committed_in_bytes" : 174878720,
      "pools" : {
        "survivor" : {
          "peak_used_in_bytes" : 34865152,
          "used_in_bytes" : 8099120,
          "peak_max_in_bytes" : 34865152,
          "max_in_bytes" : 34865152,
          "committed_in_bytes" : 34865152
        },
        "old" : {
          "peak_used_in_bytes" : 256622432,
          "used_in_bytes" : 110373176,
          "peak_max_in_bytes" : 724828160,
          "max_in_bytes" : 724828160,
          "committed_in_bytes" : 724828160
        },
        "young" : {
          "peak_used_in_bytes" : 279183360,
          "used_in_bytes" : 181462696,
          "peak_max_in_bytes" : 279183360,
          "max_in_bytes" : 279183360,
          "committed_in_bytes" : 279183360
        }
      }
    },
    "gc" : {
      "collectors" : {
        "old" : {
          "collection_time_in_millis" : 201,
          "collection_count" : 2
        },
        "young" : {
          "collection_time_in_millis" : 2295,
          "collection_count" : 62
        }
      }
    },
    "uptime_in_millis" : 2429462
  }
}

スレッド数、JVMのヒープ、GC実行回数などが見えますね。

それでは、別のLogstashを使って、このAPIの結果をLogstahに入れてみます。

今回は、http_poller プラグインを使いました。

input {
   http_poller  {
     urls => {
       host => "http://localhost:9600/_node/stats/jvm"  
     }
     schedule => { cron => "* * * * * UTC"}
     codec => "json"
     metadata_target => "http_poller_metadata"
   }
}
output {
    elasticsearch {
      hosts => ["localhost"]
      index => "jvm-%{+YYYY.MM.dd}"
      document_type  => "monitoring"
    }
}

Logstashで取り込んだ結果をKibanaで可視化してみます。

Logstash監視

ヒープ使用量、プロセスのスレッド数、GC実行回数、GC実行時間が取得できていることが確認できました。

これを使えば、Logstashの可視化ができますね。
どこかで見たような画面とか、言っちゃいけません。

最後に

LogstashのMonitoring APIでは、CPUやメモリといったリソース以外にも、
Logstashの全体イベント実行回数や、実行中のスレッド情報も取得可能です。

描画ライブラリと組み合わせると、Pipeline Viewer のような表現もできるようになっています。

是非、お試しください。