Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Prometheus の relabeling

Prometheus の relabeling

Teraoka Yoshinori

June 03, 2019
Tweet

More Decks by Teraoka Yoshinori

Other Decks in Technology

Transcript

  1. エムスリーでの Prometheus
 • 2016年に Docker Swarm を導入し、しばらくは Zabbix でメトリクスを収集していた が、Zabbix

    に慣れていないこともあり不便だったため2017年頭に Prometheus に切 り替えた
 • その後、物理・仮想サーバーへと拡大
 • Cacti で5分間隔の polling を行っていたが、もっと高頻度(1分未満間隔)で取得し たかった
 • 可視化はもちろん Grafana
 ◦ Grafana の Alert を使ってグラフ付きで slack に投稿している 
 • Alertmanager はまだ使っていない

  2. 使用している 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 を自作したりしています

  3. 導入時に躓いた話
 • (旧) Docker Swarm で registrator を使って Consul にサービス情報を登録している


    ◦ このあたりのことは SlideShare にあります 
 ◦ https://www.slideshare.net/yteraoka1 
 • Swarm クラスタ外の Prometheus からアクセスしたい
 • Consul だから consul_sd_configs を使えばそれで完了だと思ってた

  4. 導入時に躓いた話
 • Consul から取得された target にはクラスタ内でしか通信できない Container のIP アドレス、ポートが __address__

    にセットされていた
 
 これを書いていて気付きましたが Prometheus の Targets ページ (/targets) で label にポインタを乗せると Before relabeling という情報が表示される 

  5. 導入時に躓いた話 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"
  6. 導入時に躓いた話
 • label って取ってきたメトリクスについてるものなんじゃないの?
 • target address を relabel ??


    • と思いましたが、翌日には「ありがとう、解決したよ」って返してるからなんとかなっ たみたいです(もう覚えていない)
 • 「入門 Prometheus」を読んでおけばこんなことにはならないはず

  7. 導入時に躓いた話 - 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'
  8. 導入時に躓いた話 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"