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

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

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. mackerel.io
    元SREのCREが伝えたい、
    Mackerelをもっと活用するため
    の実践Tips集
    2023.09.26
    Mackerel DrinkUp #11

    View Slide

  2. はなすこと
    今日の内容は 実運用から見えてきたMackerelをより活用するための
    tips集 - Mackerel Meetup復活記念連載 #4 - Mackerel お知らせ
    #mackerelio と重なるものがあります。
    2

    View Slide

  3. 自己紹介
    ● 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

    View Slide

  4. おしながき
    ● ミュート/ダウンタイム機能の違いと、アラート
    グループ併用時の注意
    ● 不要なメトリックを送らない方法
    ● command の子孫問題と yaml での表現
    ● AWSインテグレーションでの {target,alb}_XXX
    メトリック
    4

    View Slide

  5. ミュート/ダウンタイム機能の
    違いと、アラートグループ
    併用時の注意
    5

    View Slide

  6. ミュート/ダウンタイム機能の違いと、
    アラートグループ併用時の注意
    ● ミュート : 監視ルールの通知の停止
    ○ アラート自体は発報し、Mackerel で確認できる
    ○ 通知グループに従ったアラート通知がされない
    ○ 「監視・通知を設定する - Mackerel ヘルプ」内
    「監視ルール単位で通知を抑制する」
    ● ダウンタイム : 監視ルールによる監視の停止
    ○ アラート自体発報しない
    ○ ダウンタイムを設定する - Mackerel ヘルプ
    6

    View Slide

  7. ミュート/ダウンタイム機能の違いと、
    アラートグループ併用時の注意
    ● アラートグループ : ロールや同じ監視ルール
    でのアラートをまとめる
    ○ コンソールでのアラート表示や、それぞれのアラー
    トからの通知をまとめることができる
    ○ 例 : 100台所属するロールで一気に負荷上昇、同じ
    監視ルールにより100件アラートが発報し、slack
    通知が 100 件発生した
    ■ アラートグループを使うと、1件の通知にまと
    められる
    ○ アラートグループでアラートをまとめる -
    Mackerel ヘルプ
    ● 条件に一致したアラートの数をみている
    ○ アラート発報後の通知先として存在はしていない 7

    View Slide

  8. ミュート/ダウンタイム機能の違いと、
    アラートグループ併用時の注意
    ● アラートグループの表示例
    8
    アラートグループを使用しないと、4つの通知が飛ぶ
    - hostA のアラートの発報、復旧
    - hostB のアラートの発報、復旧
    アラートグループを使用すると、2つの通知が飛ぶ
    - (hostBのアラート発生時に) アラートグループに
    よる発報通知
    - (hostAのアラート復旧時に) アラートグループ
    による復旧通知

    View Slide

  9. ミュート/ダウンタイム機能の違いと、
    アラートグループ併用時の注意
    9

    View Slide

  10. ミュート/ダウンタイム機能の違いと、
    アラートグループ併用時の注意
    10
    - ミュートは監視ルールの通知の停止
    - アラートは発報する
    - アラートグループの対象となる
    監視ルールをミュートしても、ア
    ラートグループが機能し、アラー
    トグループによる通知が行われる
    - ダウンタイムは監視の停止
    - アラートは発報しない
    - アラートグループの対象となる監
    視ルールにダウンタイムを設定す
    ると、アラートグループは機能し
    なくなり、アラートグループによ
    る通知も行われない

    View Slide

  11. 不要なメトリックを送らない方法
    11

    View Slide

  12. ● システムメトリックの一部では ignore が設定可能
    ○ 指定した正規表現に合致する対象からメトリックを収集しない
    ○ filesystem / disk / interface で設定可能
    ● mackerel-agent仕様 - Mackerel ヘルプ
    不要なメトリックを送らない方法
    [filesystems]
    ignore = "/dev/ram.*"
    [disks]
    ignore = "docker*"
    [interfaces]
    ignore = "bond.*"
    12

    View Slide

  13. ● カスタムメトリック設定では {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'

    View Slide

  14. メトリックプラグインの作り方
    14

    View Slide

  15. メトリックプラグインの作り方
    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 などで計算できる

    View Slide

  16. メトリックプラグインの作り方
    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)"

    View Slide

  17. メトリックプラグインの作り方
    17
    (required) 名前(tab)値(tab)unixtime で出力できる
    ● example.hoge として 300 を出力し続ける例

    View Slide

  18. メトリックプラグインの作り方
    ● 参考
    ○ ホストのカスタムメトリックを投稿する - Mackerel ヘルプ
    ○ mackerel-agent の plugin は Bash script で簡單に作れま
    す - c4se記:さっちゃんですよ☆
    ● Appendix : 公式プラグインは go-mackerel-plugin を利用
    ○ go-mackerel-pluginを利用してカスタムメトリックプラグ
    インを作成する - Mackerel ヘルプ
    18

    View Slide

  19. command の指定方法と yaml で
    の表現
    19

    View Slide

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

    View Slide

  21. 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

    View Slide

  22. 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 Checker "fuga" output stderr:
    test: extra argument '||' のようにエラー
    22

    View Slide

  23. command の指定方法と yaml での表現
    ● 文字列指定と配列指定どちらがいいのか
    ○ 配列指定がおすすめ。必要に応じて文字列指定も。
    ● yaml (mackerel-container-agent) では
    ○ 文字列指定
    - command: "check-http -h localhost"
    ○ 配列指定
    - command:
    - check-http
    - -h
    - localhost
    ● 参考
    ○ mackerel-agentのコマンド実行と配列指定のススメ -
    Mackerel お知らせ #mackerelio
    23

    View Slide

  24. AWSインテグレーションでの
    {target,alb}_XXX メトリック
    24

    View Slide

  25. 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

    View Slide

  26. まとめ
    ● ミュート/ダウンタイム機能の違いと、アラートグループ併用時
    の注意
    ○ アラートグループを使う時はミュートだと通知が止まらない
    ● 不要なメトリックを送らない方法
    ○ ignore や {include,exclude}_pattern で投稿するメトリッ
    クを制限できる
    ● command の子孫問題と yaml での表現
    ○ 基本は配列がおすすめ、必要に応じて文字列もどうぞ
    ● AWSインテグレーションでの {target,alb}_XXX メトリック
    ○ albはALB自体の、targetはターゲットのステータスコード
    26

    View Slide

  27. メトリックプラグインの作り方
    27
    Appendix

    View Slide

  28. メトリックプラグインの作り方
    ● 以下を実装することで、mackerel-agent を通じて投稿可能
    ○ (optional) グラフ定義を投稿できる
    ○ (required) 名前(tab)値(tab)unixtime で出力できる
    28

    View Slide

  29. メトリックプラグインの作り方
    29
    (optional) グラフ定義を投稿できる
    ● グラフ定義 : Mackerel がグラフを描画する時の設定
    ○ 例 : `custom.postgres.iotime.blk_write_time` を
    Block Write Time (ms) として表示する設定

    View Slide

  30. メトリックプラグインの作り方
    30
    (optional) グラフ定義を投稿できる
    ● グラフ定義の取得方法
    ○ mackerel-agent 起動後、MACKEREL_AGENT_PLUGIN_META を
    1 にしてプラグイン実行
    ○ 実行されたプラグインは、メトリック取得処理ではなくグラフ定義を
    出力する
    ○ 受け取った mackerel-agent が、Mackerel に送信することでグラフ定義が
    登録される

    View Slide

  31. メトリックプラグインの作り方
    31
    (optional) グラフ定義を投稿できる
    ● グラフ定義のフォーマットなど、詳しくは グラフ定義を指定する を参考
    ● optional なので、なくても問題ない
    ○ ない場合は、メトリック名がそのまま表示される

    View Slide