はじめに
こんにちは!事業開発推進部インフラ運用SLチームの樊と倉田です。
コンテナについて右も左もわからなかった私たちが、Zabbixの構築をコンテナを用いて行い、さらに設定の自動化をしてみました。今回はその方法を連載形式でご紹介したいと思います。
オープンソースの統合監視ツールであるZabbixはとても有効で多く使われています。
しかし、Zabbixを構築し、監視対象の登録を手動で行うのは時間も手間もかかってしまいます。監視対象が多ければ多いほど負担は増えてしまうのは想像しやすいです…。
そこで私たちはコンテナを用いてZabbixを構築し、監視対象をZabbixへ登録するまでの手順を自動化しました。手動で行うよりも時間を短縮するできるだけでなく、簡単な操作で設定の更新もできるのでミスのリスクも減らせます。
本連載について
「コンテナ基盤上でZabbixを自動設定してみた」は連載形式でコンテナを用いたZabbixの自動設定ができるようになるまでの手順をご紹介します。
<連載の流れ>
①KubernetesへのZabbix構築 *本連載
②AnsibleのPlaybookでZabbixへの自動登録を行えるようにする
③DockerfileでPlaybookが実行可能なコンテナイメージを作る
④GitLabのコンテナリポジトリでイメージの管理をする
⑤AnsibleファイルをKubernetes上にデプロイ
手順を段階ごとに分けることでコンテナに初めて触れる方でもわかりやすい構成になっています。
連載①:KubernetesへのZabbix構築
今回はKubernetes上にZabbixコンテナを展開し、構築する方法について紹介します。
Zabbixとは、 オープンソースの統合監視ソフトウェア です。プロセスやネットワーク、ログの監視だけでなくミドルウェアまで幅広い監視に対応します。また、Windows/Red Hat Enterprise Linux/商用UNIXなどのOS、並びにSNMPに対応したネットワーク機器および、IPアドレスを保持する機器が監視可能です。
しかし、公式サイトに配布されているパッケージからインストールする場合、操作手順が複雑で構築に何日もかかるという問題があります。そこで、コンテナ上に構築することで、構築にかかる時間を10分以内に削減できます。
今回の構築環境は、Kubernetesというコンテナ化したアプリケーションのデプロイ、スケーリング、および管理を行うための、オープンソースのコンテナオーケストレーションシステムを利用します。
前提:Kubernetes環境が構築されていること
操作端末(PC)にKubectlがインストールされていること
では、順番に操作方法について説明します。
1.公式ymlファイルの取得:
zabbix-docker/kubernetes.yaml at 6.0 · zabbix/zabbix-docker · GitHub
からバージョン6.0のymlファイルをダウンロードします。
2.persistentvolumeの作成
第1293行目を確認すると、persistentvolumeclaim(以下pvcで省略)の記述があるが、それに対応するpersistentvolume(以下pvで省略)が公式マニュフェストにはありませんでした。また、1302行を確認すると、 ”storage: 20Gi”という風に記述されています。その意味は、このマニュフェストに書かれているリソースを構築するために、20Giのストレージが必要になっています。
そのため、20Gi以上のストレージを予めに用意しする、pvというのストレージクラスを作成します。
apiVersion: v1
kind: PersistentVolume
metadata:
name: <任意の名前>
spec:
capacity:
storage: 20Gi ★pvc.spec.resources.requests.storageに記述したストレージ以上に設定します
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Delete
hostPath:
path: /data/pv0001
type: DirectoryOrCreate
作成したコードを公式ymlに追加します。
3.デプロイ
作成したymlファイルを指定し、Kubernetes上にデプロイします。5分ほどで構築が自動的に完了します。
kubectl apply -f <ファイル名>.yaml
4.構築したリソースの確認
公式ymlの1~6行目を確認すると、今回のリソースはzabbixというNamespaceに構築されています。
構築したリソースを確認するには、以下のコマンドでzabbixというNamespaceに切り替える必要があります。切り替え後、以下のコマンドで作成したpodがrunningやreadyの状態になったことを確認します。
Kubectl config set-context $(kubectl config current-context) --namespace=zabbix
kebectl get all
5.構築したZabbixにアクセスし、画面の確認
以下のコマンドでpodにport-forwardし、zabbixのGUI画面が表示することを確認します。
kubectl port-forward <webのpod's_name> <任意port>:80
例:kubectl port-forward zabbix-web-6d8c7cd59-8n98l 18888:80
ブラウザを開き、以下のURLにアクセスします。
http://localhost:<上のコマンドに入力したport番号>
以下のログイン画面が表示されます。UsernameとPasswordを入力します。(デフォルトはAdminとzabbix)
Sign Inを押すと、Zabbixのメイン画面に遷移します。
まとめ
以上の手順によって、Kubernetes上にZabbixコンテナを展開し、構築するを実現しました。操作手順が少なく、構築時間も大幅に削減することが出来ました。
今後は、Kubernetes上に構築したZabbixを実際に運用し、他のサーバーを監視するための設定作業も、引き続き連載していく予定になります。