MicronautでPrometheusでメトリクス取りたい話
Micronautはmicrometer経由でprometheusに対応してるので、create-appするとき--featuresにmicrometer-prometheusつけるとそれっぽいdependencyや設定を生成してくれます。
$ mn create-app foo --features micrometer-prometheus
Gradleはこんな感じ。
compile "io.micronaut.configuration:micronaut-micrometer-core" compile "io.micronaut.configuration:micronaut-micrometer-registry-prometheus"
設定はこんな感じ。
micronaut: metrics: enabled: true export: prometheus: enabled: true step: PT1M descriptions: true
それで http://localhost:8080/metrics/ にアクセスするとメトリクス名の一覧がとれます。
{ "names": [ "executor", "executor.active", "executor.completed", "executor.pool.size", "executor.queued", "hikaricp.connections", ... "process.uptime", "system.cpu.count", "system.cpu.usage" ] }
さらにその名前を指定すると具体的な値がとれる感じ
http://localhost:8080/metrics/hikaricp.connections
{ "name": "hikaricp.connections", "measurements": [ { "statistic": "VALUE", "value": 0 } ], "availableTags": [ { "tag": "pool", "values": [ "HikariPool-1" ] } ] }
ということでDockerでPrometheusをたてます。
こんな感じの設定ファイルを適当にローカルに置いておきます。targetsの位置はホストのIP。
global: scrape_interval: 5s scrape_configs: - job_name: 'mystat' metrics_path: '/prometheus' static_configs: - targets: - '172.17.0.1:8080'
あとはDockerにその位置をおしえてあげればOK
$ docker run -d --name mystat-prom -p 9090:9090 \ -v /c/Users/naoki/NetBeansProjects/my-stat-mn:/prom-data \ prom/prometheus --config.file=/prom-data/prometheus.yml
とするとPrometheusは起動するんですが、MicronautからPrometheus用の情報がでてきません。
なんかこんな感じでEndpointを作ってあげる必要があるっぽい。
import io.micrometer.prometheus.PrometheusMeterRegistry; import io.micronaut.management.endpoint.annotation.Endpoint; import io.micronaut.management.endpoint.annotation.Read; import javax.inject.Inject; @Endpoint(id = "prometheus", value="/prometheus", defaultEnabled=true, defaultSensitive=false) public class PrometheusEndPoint { @Inject private PrometheusMeterRegistry prometheus; @Read public String scrape() { return prometheus.scrape(); } }
Micronaut: How to get metrics in the Prometheus format? - Stack Overflow
そしたらPrometheusでデータがとれるようになりました。