Slide 1

Slide 1 text

1 Mackerelを触り始めて2年経ったので 作ってきたプラグインを振り返る 渡部 龍一/ GMO PEPABO inc. 2023/07/11 Mackerel Meetup #14 Tokyo

Slide 2

Slide 2 text

技術部プラットフォームグループ 2021年 中途入社 2 自己紹介 渡部 龍一 Watanabe Ryuichi ● ロール: SRE ● 仙台から来ました ● Mackerel歴: 2年 ● 好きな公式プラグイン: mackerel-plugin-gearmand ● Twitter : @ryuichi_1208

Slide 3

Slide 3 text

3 ペパボはどれくらいMackerel使ってるのか

Slide 4

Slide 4 text

4

Slide 5

Slide 5 text

● サービス数: 25 ● ホスト数: 840+ ● VM + コンテナ ● 監視ルール: 300+ ● プラグインの利用数: 60+ ● 用途 ● メトリクス、自動化ツール、SLIの計測 ● 自宅サーバの監視 i. アラートはLINEに通知して鳴っても放置してる 5

Slide 6

Slide 6 text

6 これまで作ったプラグイン紹介

Slide 7

Slide 7 text

● メトリックプラグイン(24個) ● mackerel-plugin-linux-netstat ● mackerel-plugin-sslhandshake-time ● mackerel-plugin-linux-meminfo ● mackerel-low-usage-police ● mackerel-plugin-mysql-extend ● mackerel-plugin-axslog-light ● mackerel-plugin-dns-healthcheck ● mackerel-errorbudget-calculator ● mackerel-plugin-dns-lookup ● mackerel-plugin-linux-virt-mem ● mackerel-plugin-linux-tcp-memory ● mackerel-plugin-linux-socket-queue-size ● チェックプラグイン(8個) ● check-ddos-udp ● check-dos-tls12 ● check-ssl-validate ● check-mysql-backup ● go-check-virtmem ● go-check-longtransaction-cnt 7

Slide 8

Slide 8 text

● メトリックプラグイン(24個) ● mackerel-plugin-linux-netstat ● mackerel-plugin-sslhandshake-time ● mackerel-plugin-linux-meminfo ● mackerel-low-usage-police ● mackerel-plugin-mysql-extend ● mackerel-plugin-axslog-light ● mackerel-plugin-dns-healthcheck ● mackerel-errorbudget-calculator ● mackerel-plugin-dns-lookup ● mackerel-plugin-linux-virt-mem ● mackerel-plugin-linux-tcp-memory ● mackerel-plugin-linux-socket-queue-size ● チェックプラグイン(8個) ● check-ddos-udp ● check-dos-tls12 ● check-ssl-validate ● check-mysql-backup ● go-check-virtmem ● go-check-longtransaction-cnt 8

Slide 9

Slide 9 text

● ryuichi1208/go-check-longtransaction-cnt ● MySQLのロングトランザクションの数を監視するチェックプラグイン ● 大容量のUNDO(rollback)セグメントを消費することによる BufferPool荒れを防ぎたく て作った i. 分析クエリの発行が1トランザクションで実行されていたりして 3日かかるようなク エリがあった ii. 閉じ忘れられるトランザクションとかにも有効 ● INFORMATION_SCHEMA INNODB_TRX テーブルあたりをパースして実装 ● 検出後はクエリを出して開発者へフィードバックとか 9

Slide 10

Slide 10 text

● ryuichi1208/mackerel-plugin-linux-socket-queue-size ● 指定したポートの listen-queue と accept-queue の数を出力するプラグイン ● /proc/net/tcpをパースして実装 ● nginxでSSL終端をしているサービスでnginxでの処理時間が伸びているという事象 が発生していた ● 当時はこの時間をリアルタイムに監視する術がなかった ● nginxで処理が詰まっていることをアラートとして出すために作成 i. nginxのスレッドがなんらかの原因で詰まると accept(2)の呼び出しが行われな いため増える ii. この数値をトリガーとしてnginx自体のオートスケール処理 10

Slide 11

Slide 11 text

● ryuichi1208/mackerel-plugin-sslhandshake-time ● 指定されたURLへhttpsリクエストをして”名前解決”、”tcp接続”、”SSLハンドシェイク” のそれぞれを計測するメトリクスプラグイン ● httptrace.ClientTraceの各処理にフックを入れて計測処理を実装 ● DNSはPowerDNSを使っていたり、OpenStack Load-balancing サービス の Octavia自分たちで運用していたりSSLの部分はngx_mrubyを使った動的証明書の 仕組みを実装していたり ● 外形監視のアラートがなった際の調査の範囲を狭めるために作成 i. DNSなのかLBなのかSSL処理部分が悪いのかをある程度短時間で判断できる 仕組み 11

Slide 12

Slide 12 text

● ryuichi1208/mackerel-plugin-linux-virt-mem ● Linuxの仮想メモリの上限と現在使用量を出力するメトリクスプラグイン ● /proc/meminfoをパースして実装 ● MySQLがメモリ使用量(RSS)は多くないのにOOMが発生していたケースがあって実 装 i. 仮想メモリの不足が原因 ● /proc/sys/vm/overcommit_memoryを1で運用(厳格なオーバーコミット管理) i. 夜中に仮想メモリをめっちゃ使用しているグラフがわかった ii. プラグインも結構使用していることがわかった iii. 参考) Why does my Go process use so much virtual memory? 12

Slide 13

Slide 13 text

13 終わりに

Slide 14

Slide 14 text

● Mackerelプラグインサクッと作れてとても楽しい ● ChatGPTを使って仙台->東京の移動で作ったりして東京でリリース ● OpenTelemetry対応弊社のメンバーもとても楽しみにしてます!! ● (宣伝)9月にペパボのSREやってるメンバーで勉強会やります!! 14

Slide 15

Slide 15 text

15 ご清聴ありがとうございました