Prometheusを始めよう / Introduction Prometheus ja

Dcea5102277e5883c29e0b15e51ae1bd?s=47 kameneko
September 25, 2019

Prometheusを始めよう / Introduction Prometheus ja

「Introduction Prometheus」の日本語・改訂版です。
https://speakerdeck.com/takumanakagame/introduction-prometheus

Dcea5102277e5883c29e0b15e51ae1bd?s=128

kameneko

September 25, 2019
Tweet

Transcript

  1. Prometheusを始めよう かめねこ さくらインターネット株式会社

  2. かめねこ Takuma Nakagame @kameneko1004 • SAKURA internet Inc. ◦ Cloud

    Service Provider • IT infrastructure engineer • Evangelist • LIKE ◦ Prometheus ◦ FreeNAS
  3. 今回のゴール • Prometheusを触りたくてソワソワしちゃう • 監視がやりたくなる • というかPrometheusに恋する

  4. Prometheusとは?

  5. Prometheusとは? • SoundCloudのエンジニアによって開発された監視システム • 時系列データベース採用したPull型データモデル • 自動で監視対象を追跡するServiceDiscovery • PromQLによる柔軟なクエリ •

    Golangで書かれているのでシンプル
  6. Dream Hack Monitoring with Prometheus • 10,000 computers • 500

    switches by PromCon 2016 Berlin https://promcon.io/2016-berlin/talks/monitoring-dreamhack-the-worlds-largest-digital-festival/
  7. Prometheusのアーキテクチャ

  8. None
  9. None
  10. ちょっとよくわからないので

  11. 最低限のコンポーネントをご紹介

  12. これだけ覚えればとりあえずOK • Prometheus Server • Exporter • Service Discovery •

    PromQL
  13. • 監視ターゲットからメトリクスを収集 • PromQLで必要なメトリクスを抽出 • Alertを定義 • WebGUI Prometheus Server

  14. Exporter • 監視エージェント的な存在 • メトリクスを収集してPrometheusに展開

  15. Exporter

  16. Exporter 監視対象ごとにExporterが存在 • Server : Node Exporter • MySQL :

    MySQL Server Exporter • Nginx : NGINX Exporter • Apache : Apache Exporter • 他にもいっぱい! https://prometheus.io/docs/instrumenting/exporters/
  17. Service Discovery 自動で監視対象を追跡 • Kubernetes • AWS EC2 • GCP

    GCE • OpenStack • Azure • …その他
  18. PromQL • Prometheus Query Language • メトリクスを抽出 • アラートの定義も •

    WebGUI • API • Grafana
  19. An Example of PromQL http_requests_total HTTPのリクエスト数をすべて取得 http_requests_total{pod_name=”nginx1”} POD ‘nginx1’なHTTPのリクエストだけ取得 sum(http_requests_total)

    HTTPのリクエストの合計を取得
  20. Prometheusを始めるには?

  21. Prometheusを始めるSTEP • コンテナ • バイナリ

  22. Prometheusを始めるSTEP 1. バイナリをダウンロード 2. ファイルを解凍 3. 実行! • コンテナ •

    バイナリ
  23. バイナリをダウンロード https://github.com/prometheus/prometheus/releases $ wget https://github.com/prometheus/prometheus/releases/download/v2.11.1/prometheus-2.12.0.linux-amd64.tar.gz

  24. 解凍 $ tar -xvf prometheus-2.12.0.linux-amd64.tar.gz

  25. Run $ cd prometheus-2.12.0.linux-amd64/ $ ./prometheus

  26. Run $ cd prometheus-2.12.0.linux-amd64/ $ ./prometheus FINISH!

  27. もう少し掘り下げると global: scrape_interval: 1m evaluation_interval: 15s scrape_timeout: 1m scrape_configs: -

    job_name: 'prometheus' static_configs: - targets: - 'localhost:9090' - 'localhost:9542'
  28. もう少し掘り下げると global: scrape_interval: 1m evaluation_interval: 15s scrape_timeout: 1m scrape_configs: -

    job_name: 'prometheus' static_configs: - targets: - 'localhost:9090' - 'localhost:9542' Prometheus全体の設定
  29. もう少し掘り下げると global: scrape_interval: 1m evaluation_interval: 15s scrape_timeout: 1m scrape_configs: -

    job_name: 'prometheus' static_configs: - targets: - 'localhost:9090' - 'localhost:9542' 監視ターゲットの追加設定 ← は静的に指定
  30. もう少し掘り下げると global: scrape_interval: 1m evaluation_interval: 15s scrape_timeout: 1m scrape_configs: -

    job_name: 'kubernetes_pods' kubernetes_sd_configs: - role: pod relabeling: - source_labels: [__meta_kubernetes_pod_name] target_label: pod_name - source_labels: [__meta_kubernetes_node_name] target_label: hostname
  31. もう少し掘り下げると global: scrape_interval: 1m evaluation_interval: 15s scrape_timeout: 1m scrape_configs: -

    job_name: 'kubernetes_pods' kubernetes_sd_configs: - role: pod relabeling: - source_labels: [__meta_kubernetes_pod_name] target_label: pod_name - source_labels: [__meta_kubernetes_node_name] target_label: hostname Kubernetesの場合は kubernetes_sd_configs を利用
  32. もう少し掘り下げると global: scrape_interval: 1m evaluation_interval: 15s scrape_timeout: 1m scrape_configs: -

    job_name: 'kubernetes_pods' kubernetes_sd_configs: - role: pod relabeling: - source_labels: [__meta_kubernetes_pod_name] target_label: pod_name - source_labels: [__meta_kubernetes_node_name] target_label: hostname relabelingで 任意のラベルを 生成・加工する
  33. Prometheusが適する環境と苦手な環境

  34. Prometheusが得意とすること • Kubernetesの監視 ◦ 標準でKubernetesのAPIをサポート • クラウド環境の監視 ◦ 大手クラウドをサポート •

    大規模監視 ◦ SaaSと比べてTCOが低くなる
  35. Prometheusが苦手とすること • ログやイベント監視 ◦ Key (メトリクスとラベルの組み合わせ ) に対して Value (浮動小数点数)

    を持つデータモデル • 100%のメトリクスを要求すること ◦ 99.9%のメトリクス ◦ 課金システムなどは注意が必要 • ドキュメントの充実度 ◦ ドキュメントが少ない ◦ 日本語は「入門Prometheus」くらい
  36. Prometheusが苦手とすること • ログやイベント監視 ◦ Key (メトリクスとラベルの組み合わせ ) に対して Value (浮動小数点数)

    を持つデータモデル • 100%のメトリクス ◦ 課金システムなどは注意が必要 • ドキュメントの充実度 ◦ ドキュメントが本当に無い ◦ 日本語は「入門Prometheus」くらい
  37. まとめ

  38. まとめ • Kubernetesやクラウドに適した監視システム • ServiceDiscoveryで監視対象を自動追跡 • Exporterの数だけ監視できる ◦ なければ作る •

    シンプル
  39. まとめ • Kubernetesやクラウドに適した監視システム • ServiceDiscoveryで監視対象を自動追跡 • Exporterの数だけ監視できる ◦ なければ作る •

    シンプル Prometheusはいいぞ