Prometheus relabel __address__

Prometheus relabel __address__

Dc7327be55331bea629e0fde1499bdba?s=128

Teraoka Yoshinori

June 03, 2019
Tweet

Transcript

  1. Prometheus の relabeling
 Prometheus Meetup Tokyo #2 2019.6.3

  2. 自己紹介
 Name: Teraoka Yoshinori Twitter: yteraoka Github: yteraoka Blog: https://blog.1q77.com/

    Job: SRE @ M3 https://jobs.m3.com/

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

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

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

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


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


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

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

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

  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" __meta_consul_tags=",," __metrics_path__="/actuator/prometheus" __scheme__="http" job="someapp"
  9. 導入時に躓いた話
 • Github で問い合わせた
 https://github.com/prometheus/prometheus/issues/2342


  10. • Github で問い合わせた
 https://github.com/prometheus/prometheus/issues/2342
 導入時に躓いた話 “You can use relabeling to

    pull in the other address.”
 は??

  11. 導入時に躓いた話
 • label って取ってきたメトリクスについてるものなんじゃないの?
 • target address を relabel ??


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

  12. 導入時に躓いた話 - 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'
  13. 導入時に躓いた話 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"
  14. https://jobs.m3.com/ 仲間募集中