zabbixエージェントをインストールしてサーバーとホストで通信する

# zabbix agentをインストール
前回zabbix serverインストールまで終わったので今回はzabbix agentインストールをやっていこうと思います。

 <details><summary>前提条件</summary><div> 
awsのインスタンスを使っています。
Red Hat Enterprise Linux
RHEL-8.4.0
t2.micro
10G
teratermでssh接続。鍵認証で入っています。
→鍵はインスタンスを作る時に作ってダウンロードしました。

→前回やったこと
zabbixサーバーをインストールしました。</div></details>

##今回やること
監視対象となるエージェントのサーバーを新しく作る。
→1. インスタンスがもう一個必要。
→2. そこにzabbixエージェントを入れて監視できるように設定。
→3. zabbix_get コマンドでホストとサーバーの通信を確認。

ここで今回やりたいことを図解してみようと思います
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/630895/e05960d1-f76f-a23b-5fcc-7e339759eb87.png)

今回はzabbix agentのサーバーを作って監視対象のホストの設定をしていきます。

##監視対象のサーバーを新たに作成

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/630895/68fb5071-8f10-846a-ae2f-f4260dd3e1e1.png)
awsのコンソールにサインイン→ec2検索→インスタンスを起動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/630895/677dade3-5cee-2681-7cf1-909d33074da5.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/630895/aac1380a-f9e0-6cc5-9dd1-0b73c84367f4.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/630895/9832386e-bbed-5e86-0c4e-8611d6775941.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/630895/846b6ec9-bd99-30bd-86d7-9ee3e573201b.png)

**！注意すること！**
1.ネットワークで既存のvpc(zabbixサーバーのインスタンスに割り当てたものと同じもの)を割り当ててください。vpcが違うと設定が面倒です。
2.サブネットも同じです。
3.自動割り当てパブリックIPは有効にしてください。
※有効にしないとネットからインスタンスにつなぐことができないです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/630895/1a56e350-9596-9ccf-37f4-46f09625d176.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/630895/86229e52-9ac0-0258-ff48-83ef24566a5b.png)
<details><summary>セキュリティグループ</summary><div>もzabbixサーバーと同じものを選んであげると楽かなと思います。
セキュリティグループが同じだとセキュリティグループ同士で通信ができるので。</div></details>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/630895/e19d40a2-5410-8d19-bb53-bc37aab384bf.png)

鍵もzabbixサーバーと同じものを選んでください。一応ダウンロードしておきます。

これでインスタンスの作成は終了になります。

作ったインスタンスにzabbix agentを入れる

##awsでインスタンスを起動します。

※インスタンスを起動するときに起動するインスタンスを選んで右クリックします。その時に「インスタンスを起動」を押してしまうとインスタンスが新しく作られてしまいます。
→「インスタンスを開始」を選びましょう。そして作業が終わったら必ず「インスタンス停止」を忘れないように。。。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/630895/75134566-8755-d569-9694-b0e6c2e3dba5.png)

teratermを起動します。
awsのパブリック IPv4 アドレスをコピーしておいてホストのところに張り付けます。
→[OK]
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/630895/e205c58e-44ae-f349-d191-ac70607e3c0a.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/630895/7b5144c5-db14-68af-1e8f-4df6733c7564.png)

[ホストからの接続拒否]の場合はセキュリティグループがおかしいことがあります。
awsの画面に戻ってインスタンスを選択して下の方のセキュリティタブをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/630895/67b0e3e0-f948-0051-abaa-d36da53cd3de.png)
セキュリティグループのリンクからセキュリティグループの設定へ飛びます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/630895/a94730a7-6159-50c9-a5b2-0ceac41d81fa.png)
インバウンドルール→黄色の枠で囲ったボタンをクリックしてインバウンドルールを変更しましょう。
<details><summary>**※インバウンドルールとは**</summary><div>
通信では様々な種類の情報が行き来します。しかし、すべての通信を自分のサーバーに許可してしまうと攻撃者からウイルスが自分のサーバーに入ってきてしまう、なんてことも考えられます。
ですから「TANAKAさんからのメールは受け取るけどそのほかの人からのメールは信用できないから受け取らない」「仲良しグループ内での電話通信ができるようにしたいけど、ほかの人は電話通信できないようにする」など信頼できる人からの通信だけ受け取って、ほかの通信は拒否することで攻撃者との通信ができないようにします。
+type＝どんな種類の通信（メール？webサイトアクセス？ssh?）ができるようにするか（許可）
+ソース＝誰からの通信（ipアドレスを指定します）→※ipアドレス:PCの住所。
変更したらルールを保存します。</div></details>

**再びteratermで接続→できた！**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/630895/b55ce012-fa5f-7ac0-a361-7b08cb12a3ba.png)
次にこの場面になります。
ユーザー名:awsを使っているなら「ec2-user」
鍵認証で秘密鍵のところにはインスタンスを作る時にダウンロードした.pemファイルを指定します。
ではssh接続でawsサーバーに接続することができました。

##サーバーにエージェントをダウンロードする
作業に移る前に「sudo su」でroot(スーパーユーザー)で作業進めることをおすすめします。
https://changineer.info/server/monitoring/monitoring_zabbix_agent2.html
上のページがzabbixエージェントダウンロードについてとても分かりやすくまとめてくれています。

**コマンド貼ります。**

```
rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/8/x86_64/zabbix-release-5.0-1.el8.noarch.rpm
```
サーバーにzabbixをダウンロードしたときのリポジトリ↓
```
https://repo.zabbix.com/zabbix/5.0/rhel/8/x86_64/zabbix-release-5.0-1.el8.noarch.rpm
```
→
最初に公式ページでサーバーダウンロードしたときのリポジトリがこれだったので、バージョンとか確認して同じエージェントをダウンロードする必要があります。
 [ちなみに一覧ページはこちら](https://repo.zabbix.com/zabbix/5.0/rhel/8/x86_64/)

```
dnf install zabbix-agent2
```
エージェント2をダウンロードしています。→ちなみにエージェント（1）でもいけます。2でも1でも問題なく通信できました。

```
systemctl enable zabbix-agent2.service --now
```
エージェントをサーバーが起動したときに自動的に起動するようにしています。

注意が必要なのはエージェントをダウンロードし終わった後の

```
「vi /etc/zabbix/zabbix_agentd2.conf」
```

でエージェントの設定ファイルをどうにかこうにか変更していくところです。

※viで開くと本来なら設定ファイルの内容がバーッと出てくるのですが出てこないときは新しいファイルを作ってしまっているので「cd /etc/zabbix/」→「ls -a」で丁寧に開いていくことをおすすめします。
では具体的にviで**zabbix_agentd2.conf**を編集していきましょう。

編集するのは次の３点です。

・Server=
・ServerActive=
・Hostname=


```
#Server=127.0.0.1
 Server=10.0.#.#　→zabbixサーバーのプライベートIPv4アドレスになります。
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/630895/d8eb890c-5ac0-a78f-46be-d75e0cb9cc15.png)

```
#ServerActive=127.0.0.1
ServerActive=10.0.#.#

#Hostname=Zabbix server
Hostname=ZabbixHost1
```
※↑これは任意の名前で大丈夫ですが、zabbixサーバーをweb画面上で操作しホストを追加するときに同じ名前じゃないと追加ができなくなるのでどこかに必ずメモしておいてください。
zabbixサーバーのzabbix_agentd.confファイルのhost名とかぶらないようにしてください。
ここまでで設定が終わり。

##通信を確認する

zabbix-getコマンドは手動でインストールしとかなきゃいけなかったです。
手動インストールします。※サーバーとホストどちらにもインストールします。

```
yum install zabbix-get
zabbix_get
usage:
  zabbix_get -s host-name-or-IP [-p port-number] [-I IP-address] -k item-key
  zabbix_get -s host-name-or-IP [-p port-number] [-I IP-address]
                --tls-connect cert --tls-ca-file CA-file
                [--tls-crl-file CRL-file] [--tls-agent-cert-issuer cert-issuer]
                [--tls-agent-cert-subject cert-subject]
                --tls-cert-file cert-file --tls-key-file key-file
                [--tls-cipher13 cipher-string] [--tls-cipher cipher-string]
                -k item-key
  zabbix_get -s host-name-or-IP [-p port-number] [-I IP-address]
                --tls-connect psk --tls-psk-identity PSK-identity
                --tls-psk-file PSK-file [--tls-cipher13 cipher-string]
                [--tls-cipher cipher-string] -k item-key
  zabbix_get -h
  zabbix_get -V
```

<details><summary>ここから通信がうまく行かなかったので対応。見なくても大丈夫。</summary><div>
zabbixサーバーとエージェントで疎通確認をするためにzabbix_getコマンドをサーバーとエージェント両方に登録しましたが、このコマンドが動作しません。

```
zabbix_get -s 10.0.#.# -k agent.version
zabbix_get [2690]: Timeout while executing operation
```
LogFile=/var/log/zabbix/zabbix_agentd.log
上手くいかないことがあったらlogファイルを見ましょう！

```
2021/08/06 06:21:01.179732 [101] active check configuration update from [10.0.1.22:10051] started to fail (dial tcp :0->サーバーipアドレス:10051: i/o timeout)
```
```
tail /var/log/zabbix/zabbix_agentd.log
active check configuration update from [127.0.0.1:10051] started to fail (cannot connect to [[127.0.0.1]:10051]: [111] Connection refused)
```
```
cd /etc/zabbix/
ls
zabbix_agentd.conf  zabbix_agentd.d  zabbix_server.conf
```
</div></details>

####ここまでやって結局原因は・・・・

awsのセキュリティグループでした！
図1
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/630895/6f639ccc-3049-6e52-5cb8-8ad115f7aa20.png)
**原因**
同じセキュリティグループ同士の通信をsshとicmpという通信だけに限定していた。

**→そうすると起こる事象**
zabbixサーバーと監視対象のサーバーはエージェントがやり取りして情報を集めている。
監視対象との通信が限定されている

→通信のためのポートが一部閉じられている。
→エージェントが通信できない。
→ホストとの通信ができない、エージェントが使用停止状態に。

**そもそもなんでこんな設定をしたか**
以前、「ポートに対する攻撃に注意しなさい」という旨の記事を読んだ。
ポートを開けているのが怖くなった。
内部の通信もかなり限定してしまった。

**セキュリティのために**
内部の通信は自分しか使わないので緩くても大丈夫。
気を付けるべきは外部からの通信で、これはIPアドレスなどを指定してあげる必要がある。
※一応そのイメージを図1にしました。
→反省:怖がる前に調べる。

##ではZABBIXのコマンドで通信できるか確認します。
 [zabbix_get コマンド](https://www.checksite.jp/zabbix_get-command/)

```
[ec2-user@ip-10-0-1-22 ~]$ zabbix_get -s 10.0.1.11 -k system.hostname
ip-10-0-1-11.us-east-2.compute.internal
```
→無事監視対象ホストと接続ができました。

##次回
zabbixウェブ画面でホスト追加の方法。
パラメーターなどを設定してディスクを監視する方法。
を書いていきます。