Prometheus の label をいいかんじに使う 〜多次元データってなんなのさ〜

54b63b9d58e185f652ab5cc91de8287e?s=47 sugitak
April 10, 2017

Prometheus の label をいいかんじに使う 〜多次元データってなんなのさ〜

【Prometheus Tokyo Meetup #1】
Prometheus は立てるのは簡単ですが、しっかり使おうとすると Label を適切に設定できるようになる必要があります。 Label について自分で調べたときにはあまりドキュメントが整理されておらず、適切な理解に到るまでにずいぶん時間を使ってしまったので、今後 prometheus を立てる人のために、私が経験したことを一通り日本語資料に落としておきます。

54b63b9d58e185f652ab5cc91de8287e?s=128

sugitak

April 10, 2017
Tweet

Transcript

  1. 2.

    qiita:sugitak です • 元・ネットワーク系 ◦ Cisco ◦ 無線構築 • 自称デプロイ屋

    ◦ bundler, capistrano, … • 監視も古典系出身 ◦ Nagios + Cacti から開始 ◦ munin, growthforecast, … ◦ Zabbix ◦ mackerel • 現在は freee 社で開発者
  2. 3.
  3. 6.
  4. 8.

    ラベルとは? • ようはタグ • Grafana でまとめて見たい単位 ◦ Stage ごととか、 Role

    ごととか、 Service ごととか ◦ データセンターごととか、ラックごととか • Alert をまとめる単位にもなるので、きちんとつける これをきちんとつけてると、 Grafana で「このラベルのデータだけ絞り込んで見たい」と いうことができる! 絞り込みを複数のパラメータで独立してできるので「多次元」という言い方 正直わかりにくい
  5. 9.
  6. 13.

    デフォルトでは、ラベルは登録されない 使用する段階でのラベル instance = ”192.168.0.1:9100” __meta_ec2_tag_Role = “Web” __meta_ec2_tag_Stage =

    “Production” __meta_ec2_private_ip = “192.168.0.1” Service Discovery されてきたラベル __address__ = ”192.168.0.1:9100” __meta_ec2_tag_Role = “Web” __meta_ec2_tag_Stage = “Production” __meta_ec2_private_ip = “192.168.0.1”
  7. 15.

    ラベル名の変換規則を設定ファイルに書く 使用する段階でのラベル instance = ”192.168.0.1:9100” Role = “Web” Stage =

    “Production” Service Discovery されてきたラベル __address__ = ”192.168.0.1:9100” __meta_ec2_tag_Role = “Web” __meta_ec2_tag_Stage = “Production” __meta_ec2_private_ip = “192.168.0.1” relabel_configs: - source_labels: [__meta_ec2_tag_Role] target_label: Role - source_labels: [__meta_ec2_tag_Stage] target_label: Stage
  8. 17.

    ラベルの Best Current Practice • ラベルはホストの属性そのものなので、変わらないものを選択する • ラベルはカーディナリティ低いものにする ◦ せいぜい10種類に収まるものだけ、ラベルとして検討する

    • ラベルの種類はあまり増やしすぎない ◦ メモリやCPU、ネットワーク帯域などに影響が出る https://www.robustperception.io/target-labels-are-for-life-not-just-for-christmas/ https://prometheus.io/docs/practices/naming/#labels https://prometheus.io/docs/practices/instrumentation/#do-not-overuse-labels
  9. 24.

    おまけ: Grafana のグラフ表示を早くするテクニック集 点と線の数が増えれば増えるほど処理が遅くなるので 普段見るグラフはとにかくダイエットさせるのがおすすめ • Resolution を下げる ◦ よく変化するものでも

    1/4 程度。あまり変化しないものは 1/10 にする • 可能な限りアグリゲーション系関数を使う ◦ なるべく個別ホストを見ない ◦ 「メモリが最低になっているホスト」とか「平均」を見る • rate より irate を使う(ただし変化の振れ幅が大きいものに限る) • 使われていない or 文を消す ◦ 公開されてる Grafana screen はいろんな環境で使えるように作られてるので、自分の環境に合わ せてチューンするといいかんじになる • topk, bottomk を活用する ◦ 高い方から k 件、低い方から k 件をグラフにしてくれる ◦ min, max では問題がおきているのが一件だけなのかわからなくて困る、というときに • 見ないグラフを消す、proactive / reactive を意識して board を分ける
  10. 25.

    おまけのおまけ: 情報がないときにしてること • https://prometheus.io を読み込む ◦ ややわかりにくいけど、全部読めば知りたいことのうち 70% くらいは書いてある ◦

    ドキュメント整備プロジェクトも開始してるので今後に期待 • promcon の資料を見る ◦ 2016 年の promcon の英語資料がかなりいい。実は公式よりも入門者向け ◦ 2017 年は 8 月開催予定 • Prometheus users ML で検索する • 諦めてコード読む
  11. 26.

    Template の詳細設定にて “All” の置き換えを設定 こうすることで、 PromQL に 合う形で「全ホスト指定」をで きる テンプレート

    node_memory_MemAvailable{Stage=~"$stage", Role=~"$role"} Stage: All Role: All node_memory_MemAvailable{Stage=~".+", Role=~".+"} Stage: All Role: web node_memory_MemAvailable{Stage=~”.+", Role=~"web"} 修正前のスライド