LoginSignup
9

More than 5 years have passed since last update.

Elasticbeanstalk with Docker でmackerel-agentを動かす時の設定と課題 - MackerelAdventCalendar 2015 7日目

Last updated at Posted at 2015-12-07

MackerelAdventCalendar 7日目の記事です。

はじめに

私が所属しているVASILYでは、Zabbixで監視していたものをMackerelへ移行を行っており、新規で立てられるサーバーには、Chefでプロビジョニングする際にmackerel-agentが組み込まれるようになっています。

私が主に管理している広告配信サーバは、今年の6月にElasticBeanstalk with Dockerに置き換えました。multi-containerで構成しており、その一つにmackerel-agentのcontainerも組み込んでいます。
docker-mackerel-agentがDockerHubにあるので、Dockererun.aws.jsonで少し設定するだけで組み込めます。

{
  "AWSEBDockerrunVersion": 2,
  "containerDefinitions": [
~~snip~~
    {
      "name": "mackerel-agent",
      "image": "mackerel/mackerel-agent",
      "memory": 512,
      "links": [
        "ad-server",
        "nginx-proxy"
      ],
      "essential": true,
      "environment": [
        {"name": "apikey",  "value": "API_KEY"},
        {"name": "include", "value": "/etc/mackerel-agent/conf.d/*"},
        {"name": "auto_retirement",  "value": "1"}
      ],
~snip~
    }
  ],
~snip~

}

DockerとElasticBeanstalkでauto-scaling環境を構築しているので、その設定を数か所加えています。

dockerのmetrics

  • dockerのmetricsを取得するための設定
  • /etc/mackerel-agent/conf.d/docker.conf
[plugin.metrics.docker]
command = "/usr/local/bin/mackerel-plugin-docker"

display_name

  • mackerel-agentのdocker containerのidがmackerelのdashboard上のホスト名となることへの対応になります
  • /etc/mackerel-agent/conf.d/display_name.conf
display_name = "ad-server"

host_status

  • 起動/終了時のmackerel dashboard上のstatusを変更する対応
  • /etc/mackerel-agent/conf.d/host_status.conf
[host_status]
on_start = "working"
on_stop = "poweroff"

しかし、on_stopはElasticBeanstalk+Dockerの環境では上手く動かない状態です。 @songmu さんに相談したところ、停止処理時にインターネット上に出て行く必要があるとのことで、ElasticBeanstalkの環境は、instanceがいきなりterminateされるので、厳しい状態です。

fluentdとの連携

fluentd-plugin-mackerelを利用して、広告の配信数、impression数、click数などをグラフ化して、日々の配信状況を監視したりもしており、広告管理ツール内にグラフを貼り付けたペライチのページをつくり、エンジニア以外にもグラフをざっくり確認してもらってりしています。
先日行われた FasionTech MeetupでfluentdとmackerelでカジュアルモニタリングというLTをしたりもしました。

auto-retirement

auto-scaling環境では、自動退役をしないとつらいので、設定をおこないました。
mackerel-agentには環境変数で AUTO_RETIREMENT=1 を設定すると自動退役してくれる機能がありますが、Docker環境ではうまくいかないということで、@stanaka さんに対応 していただきました。
これにより、auto-retirement=1を環境変数で起動時に設定すると docker stop mackerel-agent-containerid で dockerを停止した際に、自動退役してくれるようになりました。

しかし残念ながら、on_stopと同様にinstanceがいきなりterminateされる環境では、処理がうまくhookできず、自動退役は実現できていない状態です。。
(**ElasticBeanstalkのinstance terminate時のhook処理の設定方法をご存知の方は教えて下さい。。。)

base-platformの選択により解決しました
http://qiita.com/tknzk/items/a6b1a9003ff26683b88a#_reference-0ee456eeb535cbab2a74

まとめ

  • 環境依存でうまく動かない機能がありますが、基本的には、少しの設定でよしなに動いてくれるMackerelは便利
  • fluentdとの連携でservice metricsを簡単に登録できるので、カジュアルにグラフ化できて便利

明日は @tkuchiki さんです。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9