#今後
2つの未解決の問題があります。
zabbixテンプレートは複雑なフィルタリングルールを自動的に検出し、自動検出のグラフィック表示は表示されず、自動検出されたアイテムはアプリケーション クラスター内のホストに表示されません 。
次に、grafanaは、自動ネットワーク検出グラフィック表示の変数に似ています。
$ネット | *。ネットワークインターフェース。* |
書き方がよくわかりません。
-------------------------------------トピックzabbixモニタリングドッカーを開始します。
スクリプトの説明の監視:
最初の解決策は、DockerのPythonバージョンのAPIを使用してから、カスタムスクリプトを自分でカプセル化することです。これは少し面倒ですが、個人的なカスタマイズ効果を実現できます。
2つ目は、パッケージ化されたテンプレートを使用してそれを行うことです。これは単純で物事を節約しますが、機能は制限されており、スクリプトを作成してさらに多くの機能を開発する必要があります。
構成の開始特定の使用法のために
モジュールdocker-pypip
install docker-pyをインストールし
ます。https://docker-py.readthedocs.io/en/stable/を参照してください
。以下は、dockerコンテナーを自動的に検出するためのスクリプトの記述を開始します。操作はzabbix_agent側で実行されます。二つのタイプが1のシェルスクリプトであり、他方はPythonスクリプトでもあります。
スクリプトは、一般的にここに置かれているの/ etc / ZABBIX /スクリプト(新しいスクリプトディレクトリが作成されます)
#猫/etc/zabbix/script/docker_discovery.sh
# !/ bin / bash
docker(){ port =($(sudo docker ps -a | grep -v "CONTAINER ID" | awk '{print $ NF}')) printf '{\ n'printf' \ t "data ":[\ n'for key in $ {!port [@]} do
}ケース$ 1 in docker)docker ;; *)echo "Usage:` basename $ 0` {docker} " ;;
esac
に使用した2番目のスクリプト:
#cat /etc/zabbix/script/docker_discovery.py
#!/usr/bin/env python
import os
import simplejson as json
t=os.popen("""sudo docker ps |grep -v 'CONTAINER ID'|awk {'print $NF'} """)
container_name = []
for container in t.readlines():
r = os.path.basename(container.strip())
container_name += [{'{#CONTAINERNAME}':r}]
print json.dumps({'data':container_name},sort_keys=True,indent=4,separators=(',',':'))
上記のスクリプトを実行するには、2番目のタイプのスクリプトを使用することをお勧めします。最初にモジュールをインストールし、実行権限を与える必要があります
。pipinstall simplejson
chmod 757 docker_discovery.py
chown zabbix :zabbix / etx / zabbix / script -R
Give zabbix権限、/ etc / sudoersの編集、追加次のコンテンツ
zabbix ALL =(root)NOPASSWD:ALL#より多くの権限
または
zabbix ALL =(root)NOPASSWD:/ usr / bin / docker、/ usr / bin / python、/ etc / zabbix / script / docker_discovery.py、/ etc / zabbix / script / docker_minion.py#この書き込み方法はより具体的です。
次のように、/ etc / zabbix / zabbix_agentd.d /に配置される構成ファイルを追加します。
#cat
docker_discovery.conf UserParameter = docker_discovery、python / etc / zabbix /script/docker_discovery.py
UserParameter = docker_discovery [*]、python /etc/zabbix/script/docker_discovery.sh $ 1
テスト:
[root @ localhost zabbix_agentd.d] #zabbix_get -s 127.0.0.1 -k docker_discovery
{ "data":[ { "{#CONTAINERNAME}": "slave2" }、 { "{#CONTAINERNAME}": "slave1" }、 { "{#CONTAINERNAME}": "master" } ] }以上です。別のスクリプトは、コンテナ内のさまざまな状態を監視します。次のように:#cat /etc/zabbix/script/docker_minion.py
#!/usr/bin/env python
import docker
import sys
import subprocess
import os
def check_container_stats(container_name,collect_item):
#docker_client = docker_client.containers.get(container_name)
container_collect=docker_client.containers.get(container_name).stats(stream=True)
old_result=eval(container_collect.next())
new_result=eval(container_collect.next())
container_collect.close()
if collect_item == 'cpu_total_usage':
result=new_result['cpu_stats']['cpu_usage']['total_usage'] - old_result['cpu_stats']['cpu_usage']['total_usage']
elif collect_item == 'cpu_system_usage':
result=new_result['cpu_stats']['system_cpu_usage'] - old_result['cpu_stats']['system_cpu_usage']
elif collect_item == 'cpu_percent':
cpu_total_usage=new_result['cpu_stats']['cpu_usage']['total_usage'] - old_result['cpu_stats']['cpu_usage']['total_usage']
cpu_system_uasge=new_result['cpu_stats']['system_cpu_usage'] - old_result['cpu_stats']['system_cpu_usage']
cpu_num=len(old_result['cpu_stats']['cpu_usage']['percpu_usage'])
result=round((float(cpu_total_usage)/float(cpu_system_uasge))*cpu_num*100.0,2)
elif collect_item == 'mem_usage':
result=new_result['memory_stats']['usage']
elif collect_item == 'mem_limit':
result=new_result['memory_stats']['limit']
elif collect_item == 'network_rx_bytes':
result=new_result['networks']['eth0']['rx_bytes']
elif collect_item == 'network_tx_bytes':
result=new_result['networks']['eth0']['tx_bytes']
elif collect_item == 'mem_percent':
mem_usage=new_result['memory_stats']['usage']
mem_limit=new_result['memory_stats']['limit']
result=round(float(mem_usage)/float(mem_limit)*100.0,2)
return result
if __name__ == "__main__":
docker_client = docker.DockerClient(base_url='unix://var/run/docker.sock', version='1.27')
container_name=sys.argv[1]
collect_item=sys.argv[2]
print check_container_stats(container_name,collect_item)
グラントのスクリプト権限:chmodの757 docker_discovery.py
のchmod 757 docker_minion.py
、/etc/zabbix/zabbix_agentd.d/に配置された設定ファイルを、追加として、次の
猫docker_status.conf
UserParameter = docker_status [*]、sudoのは/ usr / bin / python /etc/zabbix/script/docker_monitor.py $ 1 $ 2
最初のテスト:
[root @ localhost zabbix_agentd.d] #zabbix_get -s 127.0.0.1 -k docker_status [master、cpu_percent]
1.4
これは成功を意味します。
テンプレートを作成します。
最終結果
私が作成したテンプレート:https://github.com/fungitive/zabbix_template/blob/master/Template_Discovery_Docker.xml
記事を参照してください:https://blog.csdn.net/yang00322/article/details/77895301