OSS版Zimbra Collaboration Suite(ZCS)8.8のリソースを監視する

メール統合システム（サーバ）であるZCSのリソースをMuninで監視します。

自宅のPCサーバにてメールサーバ(ZCS8.8.15)を運用しているのですが、そのサーバのリソース監視をしようと思い、以下の対応を行いました。

# 最初に説明
## Zimbra Collaboration Suite(ZCS)とは
メール送受信やメールボックス管理のほか、Webメール、カレンダー、アドレス帳などの機能も持ったメール統合環境を提供するサーバソフトウェアです。
アメリカのSynacor社が開発しており、国内でも一般企業のほか、大手ISPも複数社がメールサービス提供のために採用するなど、数百万メールアドレス規模の運用にも耐えられる設計となっています。

今回は、無償版のZCS8.8.15の監視設定を行います。
Zimbra Collaboration Open Source Edition
https://www.zimbra.com/open-source-email-overview/

##Muninとは
オープンソースのサーバリソース監視ツールです。システムやネットワークなどの監視ツールは、有償/無償、オンプレミス/クラウドなど、様々な形態で多数のソリューションがありますが、

- Perl動作
- エージェントプログラムによるデータ収集
- RRDtoolによるグラフ作成機能に特化
- インストール、設定が簡単

という特徴があり、単にグラフで傾向把握や閾値超過を見つけたいだけの場合での選択肢の一つです。（閾値超過時のメール通知機能もあります）
MuninにはZimbra向けリソース取得プラグインがあるため、今回はそれを利用します。（他のソリューションでもあるかもしれない）

Munin
http://munin-monitoring.org/

## 環境について
今回実施した環境は以下になります。(ZCSサーバ環境)


| 項目 | 内容 |
|:-:|:-:|
|ZCS   |8.8.15   |
|Perl   |v5.16.3   |
|munin-node   |2.0.51   |
|Text::CSV_XS   |1.40   |

muninプラグインはZCS5以降であれば動作するようです。

# 手順
## 準備
ZCSおよびMuninサーバの構築は完了しているものとします。
（それぞれインストール＆設定はすごく簡単なのでこれを機会に是非特にZimbraをですね）

ZCS自体でもリソース収集(zmstat)しており、標準であれば/opt/zimbra/zmstat/配下に各リソースデータがCSV形式で蓄積されます。ただしこのままだと見づらいため、今回監視ツール(Munin)との連携を行います。
CSVを扱うため、まずCPANで配布されているText::CSV_XSをインストールします。

```shell
> sudo perl -MCPAN -e shell
cpan> install Text::CSV_XS

インストール＆バージョン確認
> perl -MText::CSV_XS -e'print $Text::CSV_XS::VERSION' ; echo
1.40
```

## Munin-nodeの導入
CentOS7の場合、Munin(-node)はEpelにて公開されているので、Epelのレポジトリからyumでインストールします。
エージェントであるmunin-nodeのみインストールします。

```shell

> sudo yum -y install munin-node
```
Munin-nodeの設定
まず、munin-nodeの設定を行います。自分自身(ZCSサーバ)のhostnameと、muninのサーバからのアクセス許可の設定をします。

```shell
> sudo vi /etc/munin/munin-node.conf
# ZCSサーバのホスト名
host_name myzcs01
# muninサーバのIPアドレス
allow 192.168.0.8
```
次にZCS用の設定ですが、ZCS向けのプラグインがすでに準備されており、それを利用します。ただ、監視できる項目が多いため、必要なものに絞って監視することとします。
以下は"JVM heap free"の取得方法です。
オプションのプラグインは/usr/share/munin/pluginsにあり、必要なものを/etc/munin/pluginsへリンボリックリンクを貼る形で有効化します。
ZCSプラグインは、”zimbra_”というファイル名ですが、この1プログラムでZCSすべてのリソース取得に対応しており、リンクを貼る際に取得したいリソース名に変更することでそのリソースを取得できるようになります。
"JVM heap free"の場合、

```shell
> sudo ln -s /usr/share/munin/plugins/zimbra_ /etc/munin/plugins/zimbra_jvm_heap_free
```

内部的にzimbra_以下の文字列で処理を分岐させるルーチンになっています。（なんだこれ）
リンク作成後、グラフ表示の際のラベル設定を行います。

```shell

> sudo vi /etc/munin/plugin-conf.d/munin-node
[zimbra*]
group zimbra
```

これで設定は完了です。最後にmuninエージェントを起動します。

```shell

> sudo systemctl start munin-node
> sudo systemctl enable munin-node
```

"JVM heap free"以外には以下の項目が監視できます。
client_active_connections
client_request_rate
client_response_time
connpool_latency
jvm_heap_free
jvm_heap_used
jvm_major_gc_count
jvm_major_gc_time
jvm_minor_gc_count
jvm_minor_gc_time
jvm_permgen
lmtp_throughput
lmtp_delivery_rate
lucene_cachehit
lucene_io
lucene_writers
mailbox_add_latency
mailbox_add_rate
mailbox_cachehit
mailbox_itemblob_cachehit
mailbox_get_count
mailbox_get_latency
postfix_queue
process_cpu
process_mem_total
process_mem_rss

# Muninでの監視画面
Zimbraの監視リソースリスト
![munin_list.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/537783/04244bcd-ee6d-c1cc-56bb-de0175ef29be.png)
JVM heap freeの状態
![jvm_heap_free.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/537783/ae605d0c-0959-fcf7-46c1-6ee2b5db2cb5.png)
Mailbox add latencyの状態
![mailbox_add_latency.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/537783/940e8406-06b8-1192-e22b-a617b742c9b1.png)

個人のサーバなので、あまりメールがこないから面白いグラフにはなりませんね。

# 最後に
商用サービス提供用でシステム構築をされている場合は、独自あるいは商用の監視サービスを利用されていると思いますが、個人利用や小規模な組織内部利用の場合には監視システムの運用自体が困難な場合もあります。その際の選択肢となれば幸いです。
まぁ今時個人でメールサーバ運用とかする狂人そうそういないと思いますけれども。