Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

かめねこ Takuma Nakagame @kameneko1004 ● SAKURA internet Inc. ○ Cloud Service Provider ● IT infrastructure engineer ● Evangelist ● LIKE ○ Prometheus ○ FreeNAS

Slide 3

Slide 3 text

今回のゴール ● Prometheusを触りたくてソワソワしちゃう ● 監視がやりたくなる ● というかPrometheusに恋する

Slide 4

Slide 4 text

Prometheusとは?

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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/

Slide 7

Slide 7 text

Prometheusのアーキテクチャ

Slide 8

Slide 8 text

No content

Slide 9

Slide 9 text

No content

Slide 10

Slide 10 text

ちょっとよくわからないので

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

これだけ覚えればとりあえずOK ● Prometheus Server ● Exporter ● Service Discovery ● PromQL

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

Exporter

Slide 16

Slide 16 text

Exporter 監視対象ごとにExporterが存在 ● Server : Node Exporter ● MySQL : MySQL Server Exporter ● Nginx : NGINX Exporter ● Apache : Apache Exporter ● 他にもいっぱい! https://prometheus.io/docs/instrumenting/exporters/

Slide 17

Slide 17 text

Service Discovery 自動で監視対象を追跡 ● Kubernetes ● AWS EC2 ● GCP GCE ● OpenStack ● Azure ● …その他

Slide 18

Slide 18 text

PromQL ● Prometheus Query Language ● メトリクスを抽出 ● アラートの定義も ● WebGUI ● API ● Grafana

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

Prometheusを始めるには?

Slide 21

Slide 21 text

Prometheusを始めるSTEP ● コンテナ ● バイナリ

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

バイナリをダウンロード 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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

もう少し掘り下げると 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

Slide 31

Slide 31 text

もう少し掘り下げると 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 を利用

Slide 32

Slide 32 text

もう少し掘り下げると 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で 任意のラベルを 生成・加工する

Slide 33

Slide 33 text

Prometheusが適する環境と苦手な環境

Slide 34

Slide 34 text

Prometheusが得意とすること ● Kubernetesの監視 ○ 標準でKubernetesのAPIをサポート ● クラウド環境の監視 ○ 大手クラウドをサポート ● 大規模監視 ○ SaaSと比べてTCOが低くなる

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

まとめ

Slide 38

Slide 38 text

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

Slide 39

Slide 39 text

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