Slide 1

Slide 1 text

Prometheus の relabeling
 Prometheus Meetup Tokyo #2 2019.6.3

Slide 2

Slide 2 text

自己紹介
 Name: Teraoka Yoshinori Twitter: yteraoka Github: yteraoka Blog: https://blog.1q77.com/ Job: SRE @ M3 https://jobs.m3.com/


Slide 3

Slide 3 text

エムスリーでの Prometheus
 ● 2016年に Docker Swarm を導入し、しばらくは Zabbix でメトリクスを収集していた が、Zabbix に慣れていないこともあり不便だったため2017年頭に Prometheus に切 り替えた
 ● その後、物理・仮想サーバーへと拡大
 ● Cacti で5分間隔の polling を行っていたが、もっと高頻度(1分未満間隔)で取得し たかった
 ● 可視化はもちろん Grafana
 ○ Grafana の Alert を使ってグラフ付きで slack に投稿している 
 ● Alertmanager はまだ使っていない


Slide 4

Slide 4 text

使用している Exporter
 ● cAdvisor ● node_exorter ● libvirt_exporter ● postgres_exporter ● redis_exporter ● memcached_exporter ● elasticsearch_exporter ● haproxy_exorter ● jmx_exporter ● oracledb_exporter これらの他に、SpringBoot アプリに Prometheus 用の actuator を入れてい たり、アプリがもつ既存のメトリクスエンド ポイントの出力を Prometheus 用に書き 換える Proxy を自作したりしています


Slide 5

Slide 5 text

話すことが無い...
 だいたい全部この本に書いてある
 読みましょう
 
 原著のリリースが2018年7月で、それより前に躓 いた話をします


Slide 6

Slide 6 text

導入時に躓いた話
 ● (旧) Docker Swarm で registrator を使って Consul にサービス情報を登録している
 ○ このあたりのことは SlideShare にあります 
 ○ https://www.slideshare.net/yteraoka1 
 ● Swarm クラスタ外の Prometheus からアクセスしたい
 ● Consul だから consul_sd_configs を使えばそれで完了だと思ってた


Slide 7

Slide 7 text

導入時に躓いた話
 ● Consul から取得された target にはクラスタ内でしか通信できない Container のIP アドレス、ポートが __address__ にセットされていた
 
 これを書いていて気付きましたが Prometheus の Targets ページ (/targets) で label にポインタを乗せると Before relabeling という情報が表示される 


Slide 8

Slide 8 text

導入時に躓いた話 Before relabeling: __address__="10.0.1.5:32791" ← クラスタ内からしかアクセスできないアドレス __meta_consul_address="172.16.0.100" ← クラスタ外からもアクセス可能なホストのアドレス __meta_consul_dc="dc1" __meta_consul_node="docker-node2" __meta_consul_service="someapp" __meta_consul_service_address="10.0.1.5" __meta_consul_service_id="docker-node2:someapp_1:8080" __meta_consul_service_port="32791" __meta_consul_tags=",," __metrics_path__="/actuator/prometheus" __scheme__="http" job="someapp"

Slide 9

Slide 9 text

導入時に躓いた話
 ● Github で問い合わせた
 https://github.com/prometheus/prometheus/issues/2342


Slide 10

Slide 10 text

● Github で問い合わせた
 https://github.com/prometheus/prometheus/issues/2342
 導入時に躓いた話 “You can use relabeling to pull in the other address.”
 は??


Slide 11

Slide 11 text

導入時に躓いた話
 ● label って取ってきたメトリクスについてるものなんじゃないの?
 ● target address を relabel ??
 ● と思いましたが、翌日には「ありがとう、解決したよ」って返してるからなんとかなっ たみたいです(もう覚えていない)
 ● 「入門 Prometheus」を読んでおけばこんなことにはならないはず


Slide 12

Slide 12 text

導入時に躓いた話 - job_name: 'someapp' metrics_path: '/actuator/prometheus' consul_sd_configs: - server: '127.0.0.1:8500' datacenter: 'dc1' services: - ‘someapp’ relabel_configs: - source_labels: ['__meta_consul_address', '__meta_consul_service_port'] separator: ':' regex: '(.*)' target_label: '__address__' replacement: '$1'

Slide 13

Slide 13 text

導入時に躓いた話 Before relabeling: __address__="10.0.1.5:32791" __meta_consul_address="172.16.0.100" ← コレと __meta_consul_dc="dc1" __meta_consul_node="docker-node2" __meta_consul_service="someapp" __meta_consul_service_address="10.0.1.5" __meta_consul_service_id="docker-node2:someapp_1:8080" __meta_consul_service_port="32791" ← コレで __address__ を上書き __meta_consul_tags=",," __metrics_path__="/actuator/prometheus" __scheme__="http" job="someapp"

Slide 14

Slide 14 text

https://jobs.m3.com/ 仲間募集中