Mackerel ブログ #mackerelio

Mackerelの公式ブログです

プラグインによるコマンド実行に対して環境変数を指定できるようになりました ほか

こんにちは。Mackerelチーム CRE の井上(id:a-know)です。

早いもので、12月も折り返し・今年も残すところ半月です。お仕事に忘年会に、と、皆さんきっとお忙しいところかと思います。 Mackerelが継続している毎週アップデートも、来週お知らせするものが今年最後のアップデート内容となります。

年末年始を穏やかに過ごせるよう、2017年のラストスパートを乗り切っていきましょう。

それでは、今週のアップデート内容です。

プラグインによるコマンド実行に対して環境変数を指定できるようになりました

以下のような設定を conf ファイルに追記することで利用可能な、Mackerel のプラグイン。

[plugin.metrics.mysql]
command = "ruby /path/to/mysql.rb --username user --password password"

command に指定した文字列をエージェントが実行し、その結果得られた標準出力(もしくはリターンコード)をもとに Mackerel 本体に対して結果の投稿をおこなう、非常に便利なしくみです。

今週のアップデートで、このプラグインの仕組みよるコマンド実行に対して、環境変数を指定できるようになりました。 以下のような指定方法になります。

[plugin.metrics.mysql]
command = "ruby /path/to/mysql.rb"
env = { "MYSQL_USERNAME" = "user", "MYSQL_PASSWORD" = "password" }

現在公式として提供しているプラグインにおいても、その内部で用いるミドルウェアのパスワード設定などを環境変数経由でおこなえるよう、順次アップデートを実施していきます。

この機能は、チェックプラグイン、メタデータプラグインでも同様に利用することが可能です。ぜひご活用ください!

設定パスワードの強度ポリシーを見直し、セキュリティ強度の弱いパスワードでも設定可能にしました

今週のアップデートにより、以下の2点についてアップデートを実施しました。

  • 設定パスワードの強度ポリシーを見直しました
  • セキュリティ強度の弱いパスワードは設定できないようにしていましたが、これを無視できるようにしました

f:id:mackerelio:20171214185155p:plain

強度チェックを敢えて無視するオプションについて、現在Mackerelでは、GoogleやGitHubによる認証を設定していただければパスワード認証を削除することもできるようになっていますので、これらと組み合わせて適切に活用していただければと思います。

Mackerel 関連 OSS をアップデートしました

以下のとおり、mackerel-agent をはじめとした各種 OSS をアップデートしました。コントリビュートくださった皆様、いつもありがとうございます!

mackerel-agent v0.48.1

  • プラグインによるコマンド実行に対して環境変数を指定できるようになりました(上述)
  • custom_identifier の取得や、IaaSのメタ情報の収集対象を選択するためのオプション cloud_platform を追加しました

mackerel-agent-plugins v0.40.0

  • mackerel-plugin-h2o を追加しました
  • [redis] プラグインが内部的に用いている CONFIG コマンドがそのまま利用できない場合でも利用可能になりました
    • -config-command オプションにより指定します。
  • [redis] レプリケーション遅延のメトリックが新たに取得可能になりました

mkr v0.24.1

mackerel-plugin-accesslog徹底解説

Mackerelプロダクトオーナー(肩書き上はサブプロデューサー)の id:Songmu です。この記事はMackerel Advent Calendar 2017 の9日目の記事です。

今年、mackerel-plugin-accesslog という公式プラグインを書いたのですが、これが便利であり、それなりに頑張って作ったというのもあるので紹介したいと思います。

これは、Webサーバーのアクセスログを集計して、可視化してくれるものです。

インストール方法

mackerel-plugin-accesslogは公式のメトリックプラグインパッケージであるmackerel-agent-pluginsに含まれているため、それがインストールされていればすぐに利用可能です。パッケージのインストール方法は以下のページを参照してください。

ミドルウェアのメトリック可視化に公式プラグイン集を使う - Mackerel ヘルプ

Goの環境がある場合は、以下のように go get することも可能です。

% go get github.com/mackerelio/mackerel-agent-plugins/mackerel-plugin-accesslog

設定方法

mackerel-agent.conf に以下のように指定します。引数にアクセスログのファイル名を指定するだけ非常に簡単です。

[plugin.metrics.accesslog]
command = "mackerel-plugin-accesslog /path/to/access.log"

対応フォーマット

以下のログフォーマットに対応しています。

  • ApacheやNginxで使われている一般的なApache形式のログ(Common/Combined)
  • LTSVログアクセスログ

メジャーなApacheログの他に、はてなで統一的に使われており1、日本のWeb業界ではそれなりに使われるようになったLTSV(Labeled Tab-separated Values)フォーマットのアクセスログ形式をサポートしています。

LTSVアクセスログは、 ltsv.org2 で定められているRecommended Labelを利用した形式である必要があります。設定方法についても、ltsv.orgに記述がありますのでご参考ください。

アクセスログパーザーを頑張って書いた3ので、大方のログをパーズ可能だと自負しております。ただ、実は、LTSVログでの利用を強くオススメします。LTSVの場合のみ、レスポンスのレイテンシの集計が可能です。また、微々たる差だとは思いますが、LTSVのほうがパーズ効率も良いと思われます。

グラフ化される項目

以下の項目が集計されグラフ化されます。

  • ステータスコード毎のアクセス数
  • ステータスコード毎の割合
  • レイテンシ(LTSVログの場合のみ対応)
    • 平均
    • 90/95/99パーセンタイル

スクリーンショットを見ると、非常にわかりやすく可視化されることがわかるでしょう。

ちなみに、mackerel-plugin-accesslogは前回実行時に読み出したログファイル内の位置を記録しており、実行時はその続きからログを読み出します。そのためagentから定期実行された場合には、1分ごとの値が集計されます。

また、ログローテートされた場合であっても、可能な限りローテートされる前のファイルを見つけ出し、見つけた場合は、その末尾までログを読みきった後に、新しいログファイルを最初から読み込む挙動となっています。それにより、より正確な集計が実現されています。このあたりの制御は、postailerというライブラリ4により実現されています。

式グラフと組み合わせてロール単位で集計をおこなう

Webサーバーは複数台構成が一般的であるため、ロールで集計したグラフを見たいこともあるでしょう。

Mackerelには式を用いてカスタマイズしたグラフを表示する実験的機能(通称:式グラフ)があります5。この機能を使えばロール単位でのアクセスログを集計したグラフを表示させることができます。

ここでは、ロール単位でのステータスコード毎のアクセス数と割合の積み上げグラフを表示させてみます。また、式グラフは実験的機能であるため、オーガニゼーションの設定で実験的機能を利用する設定を有効にするようにしてください。6

ステータスコード別のアクセス数の積み上げグラフを表示する

上記のグラフを表示させるための式は以下のようになります。ロール名やメトリック名などは適宜書き換えてください。

group(
  stack(alias(sum(
    role(SugoiService:web,custom.accesslog.access_num.2xx_count)),
    '2xx_count')),
  stack(alias(sum(
    role(SugoiService:web,custom.accesslog.access_num.3xx_count)),
    '3xx_count')),
  stack(alias(sum(
    role(SugoiService:web,custom.accesslog.access_num.4xx_count)),
    '4xx_count')),
  stack(alias(sum(
    role(SugoiService:web,custom.accesslog.access_num.5xx_count)),
    '5xx_count')))

ステータスコード別のアクセス割合の積み上げグラフを表示する

上記のグラフを表示させるための式は少し複雑ですが以下のようになります。こちらもロール名やメトリック名などは適宜書き換えてください。

group(
  stack(alias(scale(
    divide(sum(role(SugoiService:web,custom.accesslog.access_num.2xx_count)),
    sum(role(SugoiService:web,custom.accesslog.access_num.total_count))),100),
    '2xx_rate')),
  stack(alias(scale(
    divide(sum(role(SugoiService:web,custom.accesslog.access_num.3xx_count)),
    sum(role(SugoiService:web,custom.accesslog.access_num.total_count))),100),
    '3xx_rate')),
  stack(alias(scale(
    divide(sum(role(SugoiService:web,custom.accesslog.access_num.4xx_count)),
    sum(role(SugoiService:web,custom.accesslog.access_num.total_count))),100),
    '4xx_rate')),
  stack(alias(scale(
    divide(sum(role(SugoiService:web,custom.accesslog.access_num.5xx_count)),
    sum(role(SugoiService:web,custom.accesslog.access_num.total_count))),100),
    '5xx_rate')))

式に対して監視をおこなう

式で求めた値に対して監視をおこなうことも可能です。詳しくはヘルプをご覧ください。

式グラフは強力な機能であり、正しく有用な式が書けた場合は非常に満足感が高いのですが、まだまだ使いづらい機能だとは認識しているため、機能改善につとめていきます。ご要望もお待ちしています。

fluentdを用いた集計方法との比較

公式ヘルプの「fluentdでサービスメトリックを投稿する」では、fluentdを組み合わせてアクセスログ集計を実現する方法を紹介7しています。

mackerel-plugin-accesslogを使えば、fluentdを使わずともアクセスログ集計が実現できるため非常にお手軽です。

ただ、fluentdを用いた手法が必要なくなるかというとそういうわけはありません。mackerel-plugin-accesslogはあくまで、一つのサーバーのアクセスログに対して決まった集計をおこなうものです。複数サーバーであったり独自の集計をおこなう局面ではfluentdを利用したほうが柔軟で有用な場合もあるでしょう。また、近年ログをサーバーローカルのファイルシステムには書かず、それこそfluentdなどのログコレクタに任せてしまう運用も増えてきており、その場合には、mackerel-plugin-accesslogを利用する事はできません。

まとめ

mackerel-plugin-accesslog、便利ですので、ぜひご利用ください。また、機能追加や要望などのissueやpull requestもお待ちしています。

https://github.com/mackerelio/mackerel-agent-plugins/tree/master/mackerel-plugin-accesslog

ホストメトリック・サービスメトリック監視ルールで最大試行回数を設定できるようになりました ほか

先週もお伝えした Mackerel のアドベントカレンダーですが、ユーザーのみなさまのおかげで、全ての枠が埋まりしました!

qiita.com

ありがとうございます!

また、CRE の id:Soudai が頑張るこちらのアドベントカレンダーも、開始から今日まで一つも落とすことなく、また非常に有益な情報・知見が満載のブログが毎日公開され、継続しています。

qiita.com

クリスマスまでの道のりといっしょに、これらのアドベントカレンダーを楽しんでもらえたらと思います。

それでは、今週のアップデートです。

グラフボードにカスタマイズグラフ(式グラフ)を追加できるようになりました

任意のロールグラフ・サービスメトリックグラフを好きなように配置でき、インタラクティブに操作が可能な「グラフボード」、みなさまご活用いただいているでしょうか。

mackerel.io

今週のアップデートにより、このグラフボードに追加できるグラフの種類が増え、カスタマイズグラフ(式グラフ)を追加できるようになりました!

f:id:mackerelio:20171208074156p:plain

  • あるサーバの、先週の負荷と今週の負荷の様子を重ね合わせてひとつのグラフとして表示する
  • あるロールに属するサーバの負荷の値のうち、最大値/平均値/最小値を計算したものをグラフ表示する

といったようなことが関数式の記述をすることで実現できる、非常に便利なカスタマイズグラフ。その活用が、今までよりもさらにしやすくなると思います。

カスタマイズグラフは実験的機能となっています。詳しくは以下のヘルプページを参照してください。

mackerel.io

mackerel.io

ホストメトリック・サービスメトリック監視ルールで最大試行回数を設定できるようになりました

f:id:mackerelio:20171208073940p:plain

上の画像のとおり、ホストメトリック・サービスメトリック監視ルールで「アラート発生までの最大試行回数」を設定できるようになりました。

今までは、「n分の平均値の監視」という、「平均値監視」のみをサポートしていました。この設定をもちいて、「閾値 5 を継続して越えるようなときにアラート発報させたい」といったときに、

  • 閾値として 5
  • 3分の平均値を監視

といった設定をしていた場合、756といったような経過をたどった場合(この場合の「3分の平均値」は 6)だけでなく、 1161 といったような経過をたどった場合(この場合の「3分の平均値」も 6)でもアラート発報につながり、必ずしも意図したケースだけでアラートを受け取ることが難しい場合がありました。

今回追加した「アラート発生までの最大試行回数」を用いることで、上記のようなケースでも切り分けることができるようになります。監視対象のメトリックに応じて、「n分の平均値の監視」と使い分けてもらえたらと思います。

年末年始期間中におけるサポート窓口対応の休業のお知らせ

Mackerel にログインしている状態でヘッダー右上に表示されている「サポートチームへ連絡」からのお問い合わせや、support@mackerel.io 宛へのお問い合わせへの対応について、以下の年末年始期間中はお休みさせていただきます。

年末年始休業期間:2017年12月28日(木)〜2018年1月3日(水)

この期間中にいただいたお問い合わせについては、2018年1月4日(木)以降に順次対応させていただきます。

年末年始に向けてのサーバー監視設定の見直しなどはぜひお早めに実施していただき、そこでのご不明点は早めにお問い合わせください!

Monitoring Seminar in mercari を開催しました

mackerelio.connpass.com

11月29日(水)、はてなとメルカリにおけるモニタリング事例をご紹介する"Monitoring Seminar in mercari"を開催しました。

今回は六本木ヒルズにあるメルカリ様のイベントスペースをお借りして、多くの方々にご来場いただきました。 会場を提供していただいたメルカリ様、ご来場いただいた皆様、本当にありがとうございました。

f:id:mackerelio:20171204193505j:plain

メルカリのシステム・サービス監視について

最初のセッションはメルカリの長野さんです。 前半ではメルカリにおけるモニタリングツールの歴史と運用について、後半ではMackerelでの監視項目をご紹介いただきました。 実際にどのような監視を行なっているのか、みなさん興味深く聴いておられました。

f:id:mackerelio:20171204103725j:plainf:id:mackerelio:20171204103729j:plainf:id:mackerelio:20171204103734j:plain
「メルカリのシステム・サービス監視について」セッションの様子

Microservices Monitoring at mercari

つづいてはメルカリの内田さんのセッションです。 "fast as possible"を実現するためのマイクロサービス。その監視を行うためのポイントをご紹介いただきました。 時間の関係で後半は省略でしたが、スライドで最後までゆっくりとご確認ください。

f:id:mackerelio:20171204103850j:plainf:id:mackerelio:20171204103902j:plainf:id:mackerelio:20171204103907j:plain
「Microservices Monitoring ad mercari」セッションの様子

Mackerel自身のモニタリング&監視について

はてなのWebオペレーションエンジニアの大野からは、Mackerel自身の監視について、その監視方法や監視項目、開発したプラグインを紹介されました。 監視ツール自身の監視、なかなか聴くことのできない興味深い内容だったのではないでしょうか。

f:id:mackerelio:20171204103959j:plainf:id:mackerelio:20171204104008j:plainf:id:mackerelio:20171204104015j:plain
「Mackerel自身のモニタリング&監視について」セッションの様子

開発者と監視

Mackerelプロダクトオーナの松木のセッション。 監視に対する考え方と実践方法、監視事例について話されました。 システムに対する高速健康診断にはぜひMackerelをご活用ください!

開発者と監視

f:id:mackerelio:20171204104134j:plainf:id:mackerelio:20171204104142j:plainf:id:mackerelio:20171204104152j:plain
「開発者と監視」セッションの様子

Mackerel Roadmap 2017.11.29

最後はMackerelプロデューサーの杉山から、モニタリングの重要性とMackerelのロードマップを紹介いたしました。 年内リリース予定のメトリックデータの保持期間拡充のほか、異常検知やサポート概念の拡充など、さまざまな機能をご提供する予定です。

f:id:mackerelio:20171204104235j:plainf:id:mackerelio:20171204104247j:plainf:id:mackerelio:20171204104256j:plain
「Mackerel Roadmap 2017.11.29」セッションの様子

懇親会

f:id:mackerelio:20171204102711j:plainf:id:mackerelio:20171204102716j:plainf:id:mackerelio:20171204102719j:plain
懇親会の様子

懇親会ではピザの到着が遅れるトラブルがありご迷惑をおかけしましたが、参加者の皆様は積極的に意見を交換されていて、とても楽しい時間となりました。

Mackerelでは今後もこのようなイベントを定期的に開催し、みなさまとモニタリングの知見を共有していきます。よろしくお願いいたします!

mkr プラグインインストーラーで対象のURLを直接指定できるようになりました ほか

こんにちは。Mackerelチーム CRE の井上(id:a-know)です。

12月ですね! 毎年この季節になると、IT/Web業界では「アドベントカレンダー」と称して、いろんなテーマを題材としたブログ記事で賑やかになるのですが、それは Mackerel でも例外ではありません。あります、Mackerelアドベントカレンダー!

qiita.com

あれっ、こんなカレンダーもありますね......!

qiita.com

同じくCREの曽根(id:Soudai)が張り切っているこちらのカレンダーも、ぜひお見逃しなく。

それでは、今週のアップデート内容です。

mkr プラグインインストーラーで対象のURLを直接指定できるようになりました

先日リリースをし、詳細な利用・活用方法についてもお知らせをした、コマンドラインツール mkr のプラグインインストーラー機能。

mackerel.io

こちらの機能アップデートをおこない、下記のようにURLを直接指定することができるようになりました。

mkr plugin install https://www.example.com/mackerel-plugin-foobar.zip

サードパーティの有用なプラグインを簡単にインストールすることのできるプラグインインストーラーの機能、ぜひご利用ください。

通知チャンネル・PagerDuty連携設定で V2 の API を選べるようになりました

f:id:mackerelio:20171201093609p:plain

Mackerelが連携可能な通知チャンネルのひとつ、PagerDuty連携の設定において、V2 API を選択できるようになりました。

現時点で機能的な差異は無いものの、今後の機能拡張において V2 を利用している場合にのみ利用可能なオプションを追加する可能性はありますので、利用されている方は移行の検討をお願いします。

Mackerel 関連 OSS をアップデートしました

以下のとおり、mackerel-agent をはじめとした各種 OSS をリリースしています。問題を報告くださった方、コントリビュートくださった皆様、ありがとうございました!

mackerel-agent v0.47.3

  • mackerel-agent.conf のプラグインコマンドの設定に不備があった際の出力メッセージを改善しました。
  • ネットワークカウンターが8桁以上のときにinterfaceの値が取れていない問題を修正しました。

mackerel-agent-plugins v0.39.0

  • [docker] Docker Blkio IOPS が per Minute の値を取得していた箇所を per Second に正規化しました
  • [jvm] リモートの jvm を監視するオプションが正しく機能していなかった問題を修正しました。
  • [kinesis-streams] レコードの数や処理バイト数のメトリックについて、「1レコードの統計」を出力していた点を、「1分間の総量」を出力するようにしました。

Mackerel × Twilio Hands-On Seminar の第2回を開催します

今年の4月に第1回を開催し、非常に好評いただいたハンズオンセミナー、Mackerel × Twilio Hands-On Seminar。その第2回が、12月13日(水)に開催されます。

mackerelio.connpass.com

Mackerel - Twilio 連携を非常に活用しておられるというレコチョク様の会場をお借りして、「なぜサーバー監視が必要か」という基礎のところから、エージェントのインストール、そして Twilio を介したアラートの架電通知までを一気通貫で学んでいただける貴重な機会となります。

現在ちょうど定員ぴったり、という申し込み状況ですが、抽選ですので、今から申し込みいただいても十分に可能性はあります。年末年始のサーバー監視・運用体制をより盤石にするための参考として、ぜひどうぞ!

Azureインテグレーションが Virtual Machines に対応しました

早いもので、来週からはもう12月に突入しますね。つい先日、ハロウィンが終わったところだと思っていたのですが......。

12月といえばアドベントカレンダーです! おかげさまで、Mackerel のアドベントカレンダーも少しずつ埋まりつつあります。

qiita.com

まだまだ空きがある状態ですので、みなさま奮ってご参加くださいね!

それでは、今週のアップデート内容をお知らせします。

Azureインテグレーションが Virtual Machines に対応しました

f:id:mackerelio:20171121132609p:plain

エージェントの導入をすることなくクラウドサービスの監視をおこなえる Mackerel のインテグレーション機能ですが、その Azure インテグレーションが Virtual Machines に対応しました!

取得可能なメトリックなどについては、以下のヘルプページも参照してください。

mackerel.io

現在 Virtual Machines にエージェントをインストールして利用されている場合でも、この機能は利用可能です。

両方を利用した場合でも、ひとつのホストとして管理することが可能です(インテグレーション機能で取得されたメトリックは、そのホストの「カスタムメトリック」として連携されます)ので、エージェント単体では取得できないメトリックについても Mackerel に集約することが可能です。もちろん1台分の利用料金ですので、ぜひお試しください!

ホストステータスの変更などのイベントを通知チャンネルに通知できるようになりました ほか

こんにちは。Mackerelチーム CRE の井上(id:a-know)です。

二十四節気でいうと、今は「立冬」にあたります。その暦にふさわしく、今日は各地で今季一番の冷え込みのようですね。今朝は、私も思わず、手袋を取り出してしまいました。 空気もとても乾燥しているようです。体調管理にはくれぐれもお気をつけくださいね。

それでは、今週のアップデート内容をお知らせします。

ホストステータスの変更などのイベントを通知チャンネルに通知できるようになりました

f:id:mackerelio:20171117110812p:plain

特定の通知チャンネルの設定項目として「通知するイベント」という欄が設けられ、今までのアラートの通知に加え、以下のようなイベントについてもそのチャンネルに対して通知をおこなうことができるようになりました。

  • ホストステータスの変更
  • ホストのオーガニゼーションへの登録
  • ホストの退役

これを活用することで、上記のようなイベントの発生の把握に役立つだけでなく、Webhook通知と Amazon API Gateway + Lambda などと組み合わせることで、これらのイベントの発生に応じて任意のアクションを実行する、といった仕組みを構築することもできるかと思います。

通知対象として選べるイベントの種類は、今後も拡張を予定しています。「このイベントも対応してほしい!」といったご意見・ご要望、お待ちしております!

OpsGenie V2 REST API に対応しました

以下のエントリーでもお知らせしておりました、OpsGenie V2 REST API 対応について、今週のリリースで対応が完了しましたのでお知らせします。

mackerel.io

ご迷惑をおかけしました。

Mackerel 公式プラグインレジストリに続々とプラグインが追加されています

先週リリースをし、昨日には解説記事も公開をした、CLIツール・mkr のサードパーティプラグインインストーラー機能。

mackerel.io

作っていただいたサードパーティプラグインは、より多くのユーザーに見つけてもらいやすくするために、公式のプラグインレジストリを用意しています。

github.com

プラグインレジストリのGithubレポジトリにPull Requestを送ることで、登録することができるのですが、さっそく続々と登録がされています。

mackerel-plugin-aws-batchなど、Mackerel として提供するものも追加されていますので、ぜひ一度確認してみてください!

【残席わずか】 "Monitoring Seminar in mercari" を開催します

Mackerel のヘビーユーザー企業でもあるメルカリ様の会場をお借りして、 "Monitoring Seminar in mercari" と題したセミナーを、11月29日(水)に開催します!

mackerelio.connpass.com

Mackerel に限らず、サーバーモニタリング全般についての知見を交換しあう場となります。「サーバー監視」をより身近に考えていただくためのひとつの機会となればと思っていますので、ぜひご参加ください(残席わずかです)!