MackerelAgentをAnsibleでインストールする

インサイトウォッチ

こんにちわ、吉江です。
皆様はMackerelをご利用でしょうか?
今週の月曜日に200週連続リリースを達成し、進化が止まらないMackerelですが
今回はMackerelAgentをAnsibleでざっくりインストールしてみます。

用意するもの

  • EC2インスタンス(AmazonLinux1を使用します)

サクッとやってみる

プレイブックを書きましょう

雑な作りになっている自覚はあります。(申し訳ございません) イメージとして頂ければと。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
---
- hosts: all
  become: yes
  environment:
      MACKEREL_APIKEY: '<APIキー>'
 
  tasks:
      # Mackerel-Agentインストーラーダウンロード
      - name: "Get Mackerel-Agent"
        get_url:
            dest: "/tmp/setup-all-yum.sh"
 
      # Mackerel-Agentインストーラー権限変更
      - name: "Permission Mackerel-Agent"
        file:
            state: file
            path: /tmp/setup-all-yum.sh
            group: root
            owner: root
            mode: 0755
 
      # Mackerel-Agentインストーラー実行
      - name: "Install Mackerel-Agent"
        command: "/tmp/setup-all-yum.sh"
 
      # Mackerel-Agentサービス停止
      - name: "Stopped Mackerel-Agent"
        service:
            name: mackerel-agent
            state: stopped
 
      # Mackerel-AgentホストID削除
      - name: "HostID Delete"
        file:
            path: "/var/lib/mackerel-agent/id"
            state: absent
 
      # Mackerel-Agent_AutoRetirement有効(AutoScalingで使用される場合)
      - name: "AutoScaling_Action"
        lineinfile:
            state: present
            dest: /etc/sysconfig/mackerel-agent
            regexp: '^#\ AUTO_RETIREMENT=1'
            line: 'AUTO_RETIREMENT=1'

各セクションずつ説明を書いてみます。

APIキーの変数化

MackerelAgentをインストールする際には環境変数にAPIキーを仕込んでおくことで、
セットアップスクリプトが環境変数からAPIキーをmackerelagent.confに書き込んでくれる模様です。

1
2
environment:
    MACKEREL_APIKEY: '<APIキー>'

Mackerel-Agentインストールタスク

ざっくり、mackerelのヘルプページにあるagentインストール方法をAnsibleで置き換えて記載しました。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# Mackerel-Agentインストーラーダウンロード
- name: "Get Mackerel-Agent"
  get_url:
      dest: "/tmp/setup-all-yum.sh"
 
# Mackerel-Agentインストーラー権限変更
- name: "Permission Mackerel-Agent"
  file:
      state: file
      path: /tmp/setup-all-yum.sh
      group: root
      owner: root
      mode: 0755
 
# Mackerel-Agentインストーラー実行
- name: "Install Mackerel-Agent"
  command: "/tmp/setup-all-yum.sh"

ホストID削除

Mackerel-Agentはプロセス起動タイミングでホストIDを/var/lib/mackerel-agent/idに生成します。
このホストIDごとにWebGUI側で管理が行われることからAMIを作成する際にこのホストIDファイルが存在していると
別インスタンスを起動した際にMackerel-Agentが起動失敗します。

1
2
3
4
5
6
7
8
9
10
11
# Mackerel-Agentサービス停止
- name: "Stopped Mackerel-Agent"
  service:
      name: mackerel-agent
      state: stopped
 
# Mackerel-AgentホストID削除
- name: "HostID Delete"
  file:
      path: "/var/lib/mackerel-agent/id"
      state: absent

AutoScaling対応

mackerelは一度登録されたインスタンスは手動でリタイアメント(退役)を行う必要があります。
ですが、AWS EC2でAutoScalingによるスケールアウトを行うと、起動されるたびにインスタンスが増えることになり、
スケールインされた後も残り続けます。
この残り続けると最新の監視ホストが不明になることからMackerel-Agentのプロセス終了時に自動退役を行うよう、 AutoRetirementを有効にします。

1
2
3
4
5
6
7
# Mackerel-Agent_AutoRetirement有効(AutoScalingで使用される場合)
- name: "AutoScaling_Action"
  lineinfile:
      state: present
      dest: /etc/sysconfig/mackerel-agent
      regexp: '^#\ AUTO_RETIREMENT=1'
      line: 'AUTO_RETIREMENT=1'

最後に

単純なプレイブックですが、本件を書き出してみました。
課題は多くあると思い、WindowsServerなどの他OSへの対応やAPIキーの秘匿化は
今後直さねばならない点として直していきたいと思います。

新メンバーズ