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

元SREのCREが伝えたい、Mackerelをもっと活用するための実践Tips集 / Mack...

do-su-0805
September 26, 2023

元SREのCREが伝えたい、Mackerelをもっと活用するための実践Tips集 / Mackerel Drink Up #11 do-su-0805

もともとはてなのPlatform SREとして活躍し、その後Mackerel CREへと転向したメンバーから、SREとしてMackerelを活用した経験や、Mackerelのテクニカルサポートをする中で見えてきたことから、知っているとMackerelをより活用できるTipsをお話します。

do-su-0805

September 26, 2023
Tweet

More Decks by do-su-0805

Other Decks in How-to & DIY

Transcript

  1. 自己紹介 • do-su-0805 ( do_su_0805 ) • 2015/04 ~ 2018/08

    ◦ ホスティング事業者で運用や開発業務 • 2018/09 ~ 2023/07 株式会社はてな ◦ ~ 2023/07 Platform SRE ◦ 2023/02 ~ Mackerel CRE (テクニカルサポート) • エントリ ◦ 頑張らなくていいチームだからこそ自分の強みを増やして いきたい | はてなで働く do-su-0805 にアンケート [#8] ◦ Amazon ECSのログストリームを見やすく階層的に整理で きるawslogs設定 3
  2. ミュート/ダウンタイム機能の違いと、 アラートグループ併用時の注意 • ミュート : 監視ルールの通知の停止 ◦ アラート自体は発報し、Mackerel で確認できる ◦

    通知グループに従ったアラート通知がされない ◦ 「監視・通知を設定する - Mackerel ヘルプ」内 「監視ルール単位で通知を抑制する」 • ダウンタイム : 監視ルールによる監視の停止 ◦ アラート自体発報しない ◦ ダウンタイムを設定する - Mackerel ヘルプ 6
  3. ミュート/ダウンタイム機能の違いと、 アラートグループ併用時の注意 • アラートグループ : ロールや同じ監視ルール でのアラートをまとめる ◦ コンソールでのアラート表示や、それぞれのアラー トからの通知をまとめることができる

    ◦ 例 : 100台所属するロールで一気に負荷上昇、同じ 監視ルールにより100件アラートが発報し、slack 通知が 100 件発生した ▪ アラートグループを使うと、1件の通知にまと められる ◦ アラートグループでアラートをまとめる - Mackerel ヘルプ • 条件に一致したアラートの数をみている ◦ アラート発報後の通知先として存在はしていない 7
  4. ミュート/ダウンタイム機能の違いと、 アラートグループ併用時の注意 • アラートグループの表示例 8 アラートグループを使用しないと、4つの通知が飛ぶ - hostA のアラートの発報、復旧 -

    hostB のアラートの発報、復旧 アラートグループを使用すると、2つの通知が飛ぶ - (hostBのアラート発生時に) アラートグループに よる発報通知 - (hostAのアラート復旧時に) アラートグループ による復旧通知
  5. ミュート/ダウンタイム機能の違いと、 アラートグループ併用時の注意 10 - ミュートは監視ルールの通知の停止 - アラートは発報する - アラートグループの対象となる 監視ルールをミュートしても、ア

    ラートグループが機能し、アラー トグループによる通知が行われる - ダウンタイムは監視の停止 - アラートは発報しない - アラートグループの対象となる監 視ルールにダウンタイムを設定す ると、アラートグループは機能し なくなり、アラートグループによ る通知も行われない
  6. • システムメトリックの一部では ignore が設定可能 ◦ 指定した正規表現に合致する対象からメトリックを収集しない ◦ filesystem / disk

    / interface で設定可能 • mackerel-agent仕様 - Mackerel ヘルプ 不要なメトリックを送らない方法 [filesystems] ignore = "/dev/ram.*" [disks] ignore = "docker*" [interfaces] ignore = "bond.*" 12
  7. • カスタムメトリック設定では {include,exclude}_pattern ◦ include_pattern ▪ 指定した正規表現に合致したメトリックのみ投稿 ◦ exclude_pattern ▪

    指定した正規表現に合致しないメトリックのみ投稿 ◦ 両方に合致する場合は投稿されない ◦ ホストのカスタムメトリックを投稿する - Mackerel ヘルプ • 例 : connection を含むメトリックのみ投稿されるが、 max_connections は投稿されなくなる 不要なメトリックを送らない方法 13 [plugin.metrics.mysql] command = "mackerel-plugin-mysql" include_pattern = 'connections' exclude_pattern = 'max'
  8. メトリックプラグインの作り方 15 名前(tab)値(tab)unixtime で出力する • 例 : postgres.iotime.blk_write_time(tab)0.000000(tab)1695709766 ◦ postgres.iotime.blk_write_time

    : メトリック名 ▪ mackerel-agent.conf でのカスタムメトリック設定と先頭を揃える • [plugin.metrics.postgres] • command = ["mackerel-plugin-postgres","-user","postgres"] ▪ 設定名が postgres2 だったら、postgres2.iotime... になるように • [plugin.metrics.postgres2] • command = ["mackerel-plugin-postgres","-user","postgres",”metric-key-prefix”, ”postgres2”] ◦ 0.00000 : メトリックの値 ◦ 1695709766 : unixtime ▪ date +%s などで計算できる
  9. メトリックプラグインの作り方 16 名前(tab)値(tab)unixtime で出力する • example.hoge として 300 を出力し続ける例 ◦

    mackerel-agent.conf ▪ [plugin.metrics.example] ▪ command = [ "mackerel-plugin-300" ] ◦ mackerel-plugin-300 ▪ #!/bin/sh ▪ echo -e "example.hoge\t300\t$(date +%s)"
  10. メトリックプラグインの作り方 • 参考 ◦ ホストのカスタムメトリックを投稿する - Mackerel ヘルプ ◦ mackerel-agent

    の plugin は Bash script で簡單に作れま す - c4se記:さっちゃんですよ☆ • Appendix : 公式プラグインは go-mackerel-plugin を利用 ◦ go-mackerel-pluginを利用してカスタムメトリックプラグ インを作成する - Mackerel ヘルプ 18
  11. command の指定方法と yaml での表現 • mackerel-agent でプラグインを実行する設定は2種類 ◦ 文字列指定 :

    command = "check-http -h localhost" ◦ 配列指定 : command = [ "check-http","-h","localhost" ] • 2種類の違いは、「シェルを経由するかどうか」 ◦ 文字列指定だとシェルを経由する ◦ 配列指定だとシェルを経由しない • シェルを経由する/しないの違い ◦ globや環境変数の展開がおこなわれる ◦ パイプやリダイレクションが使える 20
  12. command の指定方法と yaml での表現 • globや環境変数の展開がおこなわれる ◦ command = "check-log

    --file /path/to/*.log" ▪ *.log が展開され、該当するファイルのリストが引数 • check-log --file hoge.log fuga.log が実行 ◦ command = "check-log --file ’/path/to/*.log’" ▪ ’/path/to/*.log’ が文字列として引き渡される • check-log --file /path/to/*.log が実行 ◦ command = ["check-log","--file","/path/to/*.log"] ▪ “/path/to/*.log” がそのまま引数 • check-log --file /path/to/*.log が実行 21
  13. command の指定方法と yaml での表現 • パイプやリダイレクションが使える ◦ command="test -f $HOME/path/to/file

    || (echo 'ooooops' && exit 2)" ▪ 正常に実行される ◦ command=["test","-f","$HOME/path/to/file","||","(echo 'ooooops' && exit 2)"] ▪ WARNING <checks> Checker "fuga" output stderr: test: extra argument '||' のようにエラー 22
  14. command の指定方法と yaml での表現 • 文字列指定と配列指定どちらがいいのか ◦ 配列指定がおすすめ。必要に応じて文字列指定も。 • yaml

    (mackerel-container-agent) では ◦ 文字列指定 - command: "check-http -h localhost" ◦ 配列指定 - command: - check-http - -h - localhost • 参考 ◦ mackerel-agentのコマンド実行と配列指定のススメ - Mackerel お知らせ #mackerelio 23
  15. AWSインテグレーションでの {target,alb}_XXX メトリック • AWS インテグレーションで ALB を連携したとき、ステータス コードに関する2種類のメトリックが存在する ◦

    alb.httpcode_count.alb_{4,5}XX (alb_XXX) ◦ alb.httpcode_count.target_{2,3,4,5}XX (target_XXX) • alb_XXX は「ALB自身が応答したHTTPステータス」 ◦ ALB の不調であるとか、そもそもターゲットに到達できない ケース • target_XXX は「ターゲットが応答し、ALBがそのまま応答した HTTPステータス」 ◦ ターゲットにリクエストが到達し、ターゲットが応答したス テータス • 参考 : Application Load Balancer の CloudWatch メトリクス - Elastic Load Balancing 25
  16. まとめ • ミュート/ダウンタイム機能の違いと、アラートグループ併用時 の注意 ◦ アラートグループを使う時はミュートだと通知が止まらない • 不要なメトリックを送らない方法 ◦ ignore

    や {include,exclude}_pattern で投稿するメトリッ クを制限できる • command の子孫問題と yaml での表現 ◦ 基本は配列がおすすめ、必要に応じて文字列もどうぞ • AWSインテグレーションでの {target,alb}_XXX メトリック ◦ albはALB自体の、targetはターゲットのステータスコード 26
  17. メトリックプラグインの作り方 30 (optional) グラフ定義を投稿できる • グラフ定義の取得方法 ◦ mackerel-agent 起動後、MACKEREL_AGENT_PLUGIN_META を

    1 にしてプラグイン実行 ◦ 実行されたプラグインは、メトリック取得処理ではなくグラフ定義を 出力する ◦ 受け取った mackerel-agent が、Mackerel に送信することでグラフ定義が 登録される