ZABBIXサーバ上でCronまわしてCloudfrontの値とって監視する



### なんで

- zabbixプロキシみたいな間におくサーバ建てることについての費用的な問題（あとめんどくさい
- 他のEC2サーバの監視項目と同居させればいいじゃない
  - 「他のサーバ」がWindowsでPowershell書けないマンが今から学習するコスト（ようはめんどくさい


### 仕組み

対象の値をcloudwatchで取得してzabbix_senderで飛ばす
スクリプトをcronで回すよ

### ラインナップ

どれも例外処理ちゃんとかいてない

#### 1.ALB配下のHealthなホスト台数の取得
##### スクリプトのソース
※ターゲットグループごとに必要

```
#!/bin/sh

AWSCOM=/usr/bin/aws
ALBARN=$1


RESULT=`sudo $AWSCOM elbv2 describe-target-health --target-group-arn $ALBARN --profile $2 --output text | grep healthy | wc -l`

/usr/bin/zabbix_sender -z 127.0.0.1 -s $3 -k check_elbv2_HealthyHostCount -o $RESULT
```
※アイテムキーcheck_elbv2_HealthyHostCount想定


##### cron5分ごとなら
```
*/5 * * * * /usr/bin/sh /etc/zabbix/script/check_elbv2_HealthyHostCount_zabbixsender.sh "ターゲットグループのARN" "AWS Cliのprofile名" "zabbixに登録してるホスト名" > /dev/null 2>&1
```

#### 2.DISK使用率％の取得
##### ソース

```
#!/bin/bash
TIMESTAMP1=`date -d '5 minutes ago' --iso-8601=seconds`
TIMESTAMP2=`date --iso-8601=seconds`

DISKFREESPACE1=`/usr/bin/aws cloudwatch get-metric-statistics --period 300 \
 --namespace AWS/RDS \
 --dimensions Name="DBInstanceIdentifier",Value="$1"\
 --metric-name FreeStorageSpace\
 --statistics  Maximum \
 --start-time $TIMESTAMP1 \
 --end-time $TIMESTAMP2 \
 --output text --profile $2 | grep -i DATAPOINTS |awk '{print $2}'`

ALLOCATESTRAGE=`/usr/bin/aws rds describe-db-instances \
--db-instance-identifier=$1 \
--output json --profile $2 | grep AllocatedStorage |awk '{print $2}'|sed -e 's/[^0-9]//g'` 

DISKFREESPACE2=`echo "$DISKFREESPACE1" |awk '{print $1/1024/1024/1024,$NF}'|awk '{print $1}'`

DISKUSAGE=`echo "$ALLOCATESTRAGE - $DISKFREESPACE2" | bc`
DISKUSAGEPERCENTAGE=`echo "scale=5;$DISKUSAGE / $ALLOCATESTRAGE * 100" | bc`

/usr/bin/zabbix_sender -z 127.0.0.1 -s $1 -k check_RDS_DISKusage -o $DISKUSAGEPERCENTAGE
```
※アイテムキーcheck_RDS_DISKusage想定

##### cron5分ごとなら
```
*/5 * * * * /usr/bin/sh  /etc/zabbix/script/check_RDS_DISKusage_zabbixsender.sh "RDS名" "AWS Cliのprofile名"  > /dev/null 2>&1
```

#### 3.メモリ使用率％の取得
##### ソース

```
#!/bin/bash
TIMESTAMP1=`date -d '5 minutes ago' --iso-8601=seconds`
TIMESTAMP2=`date --iso-8601=seconds`
MEM=$4

MEMFREESPACE1=`/usr/bin/aws cloudwatch get-metric-statistics --period 300 \
 --namespace AWS/RDS \
 --dimensions Name="DBInstanceIdentifier",Value="$1"\
 --metric-name $2\
 --statistics  $3\
 --start-time $TIMESTAMP1 \
 --end-time $TIMESTAMP2 \
 --output text --profile $5 | grep -i DATAPOINTS |awk '{print $2}'`

MEMFREESPACE2=`echo "$MEMFREESPACE1" |awk '{print $1/1024/1024/1024,$NF}'|awk '{print $1}'`

MEMUSAGE=`echo "$MEM - $MEMFREESPACE2" | bc`
MEMUSAGEPERCENTAGE=`echo "scale=5;$MEMUSAGE / $MEM * 100" | bc`

MEMUSAGEPERCENTAGE2=`echo "100 - $MEMUSAGEPERCENTAGE" | bc`

/usr/bin/zabbix_sender -z 127.0.0.1 -s $1 -k check_RDS_MEMusage -o $MEMUSAGEPERCENTAGE2
```

##### cron5分ごとなら
```
*/5 * * * * /usr/bin/sh  /etc/zabbix/script/check_RDS_MEMusage_zabbixsender.sh "RDS名" FreeableMemory Maximum "RDSの搭載メモリ(数字のみで)" "AWS Cliのprofile名" > /dev/null 2>&1
```

#### 4.CPU使用率％の取得
##### ソース

```
#!/bin/bash
TIMESTAMP1=`date -d '5 minutes ago' --iso-8601=seconds`
TIMESTAMP2=`date --iso-8601=seconds`

VALUE=`/usr/bin/aws cloudwatch get-metric-statistics --period 300 \
 --namespace AWS/RDS \
 --dimensions Name="DBInstanceIdentifier",Value="$1"\
 --metric-name $2\
 --statistics  $3\
 --start-time $TIMESTAMP1 \
 --end-time $TIMESTAMP2 \
 --output text --profile $4 | grep DATAPOINTS |awk '{print $2}'`

/usr/bin/zabbix_sender -z 127.0.0.1 -s $1 -k $5 -o $VALUE
```

##### cron5分ごとなら
```
*/5 * * * * /usr/bin/sh  /etc/zabbix/script/check_RDS_resource_zabbixsender.sh "RDS名" CPUUtilization Maximum "AWS Cliのprofile名" check_RDS_CPUusage  > /dev/null 2>&1
```

#### 5.Dataconnection数の取得
##### ソース

CPU使用率％の取得のと同じ

##### cron5分ごとなら
```
*/5 * * * * /usr/bin/sh  /etc/zabbix/script/check_RDS_resource_zabbixsender.sh "RDS名" DatabaseConnections Maximum "AWS Cliのprofile名" check_RDS_DatabaseConnections  > /dev/null 2>&1
```