1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ansibleでディスク使用率監視とMattermostへの通知

Posted at

背景

個人で使用しているサーバでGrowiやMattermostを使用しており、最近使用頻度が上がったためかディスク使用率が99%となり使用できなくなったことがありました。
その時は結局ディスク拡張することで無事使用できるようになったのでよかったのですが、いつかやるか思っていたディスク監視をいい加減実施するかと重い腰を上げることになりました。
残念ながらまだZabbixなどの監視サーバは用意していないため、我が家のCronマシンAWXくんに定期的に監視してもらうようにansible-playbookを作成して、日次の監視/通知をすることに。

要件

  • 監視対象はよく使用するLinux系のサーバのみ
  • 通知先は個人で使用しているMattermost
  • 日次でサーバディスク使用率を確認し、使用率80%以上だったらMattermostに通知する

ansible-playbook

- hosts: all
  gather_facts: true

  tasks:
    - name: check disk usage
      shell: df "{{ item }}" | tail -n +2 | awk '{print $5}' | sed 's/%//'
      with_items: "{{ mounts }}"
      register: result

    - name: debug
      debug:
        msg="{{ inventory_hostname }} '{{ item.item }}' disk usage is {{ item.stdout }}%"
      with_items: "{{ result.results }}"
      loop_control:
        label: "{{ item.cmd | default(item) }}"

    - name: Mattermost Notification
      mattermost:
        url: "<MattermostURL>"
        api_key: "<APIキー>"
        text: "{{ inventory_hostname }} '{{ item.item }}' disk usage is over 80%.( {{item.stdout}}% )"
        channel: "<通知先のチャンネル名>"
        username: "<Mattermostに投稿するのユーザ名>"
        icon_url: <表示したいユーザアイコンのURL>
      with_items: "{{ result.results }}"
      when: 80 <= item.stdout|int

ざっくり説明

  • ディスク使用率取得について
    • ディスク使用率の取得はdfコマンドの使用率(Use%の項目)を使用するためshellモジュール使用
    • dfの結果をawkとsedで使用率の数値のみを取得
    • tail -n +2はヘッダー情報を削除するため
    • with_itemsで複数のマウントポイントを監視対象とする
      • サーバー毎に変数mountsでマウントポイントを指定する(以下の感じ)
mounts:
  - "/"
  - "/run"
  • debugについて
    • 自分がAWX上でぱっと見で分かるようにしたいため設定しているだけでなくてもいい
  • Mattermost通知について
    • dfコマンドの結果で80%以上だったらMattermostモジュールを実行する
    • どのホストか分かるようにinventory_hostnameを忘れずに。そのためgather_facts: true必須(だと思ってる)
    • APIキーはMattermostの内向きウェブフックの<MattermostURL>/hooks/の後ろの文字列

終わりに

まだディスク拡張したばかり(しかもタイポで想定以上に拡張してしまった)のため、普段の運用で通知されてないです。AWSのディスク使用料がコーヒー数杯分上がってしまった程度の痛み。
まぁこういうのは忘れたころにやってくるのが常なので気長に待ちます。
ちなみに通知テストとして一時的に使用率が20%以上で通知するようにした時の例ですが、以下のような通知が来るようにしてます。

image.png

1
0
0

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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?