スタンドアローンのマルチインスタンスの監視スクリプトのRedisのZABBIX

スタンドアローンのマルチインスタンスの監視スクリプトのRedisのZABBIX

会社のコストを保存してリソースをフルに活用するには、単一のインスタンス複数行の状況を展開しました。
Pythonの初心者としては、決定的に私は非常に低いスクリプトを記述して、モニタリングを実施することを決定しました。

次のスクリプトが実装、発見自動検出、次いで実現、自動レポートおよびステータスモニタを介して情報の他の監視機能。
ようなポート、パスワードなどの地域情報、Redisの各ホスト上のスクリプトが定義されなければならないことは、非常に低い場所はどのです。私は定義された例を書いたので、実際には、これは、中心部を構成し、それを共有するためにすることによって得ることができます;私はここにある簡単な簡単な方法を使用して、シェルを介して、非常に簡単ですが、少し大きい神がデータを送信するために、独自のソケットを書き込むことが一般的にあります。

#!/usr/bin/env python3.6

"""
@author:zmoke
@file: redis_monitor.py
@version:
@time: 2019/04/24
@email:[email protected]
@function:
"""

import redis
import subprocess
import sys
import json

class RedisApi(object):
    def __init__(self, name, redis_message):
        self.__redis_addr = redis_message[name][0]
        self.__redis_port = redis_message[name][1]
        self.__redis_password = redis_message[name][2]
        self.__zabbix_sender = '/usr/local/zabbix/bin/zabbix_sender'
        self.__zabbix_conf = '/usr/local/zabbix/conf/zabbix_agentd.conf'

    def connect(self):  # 建立连接
        try:
            pool = redis.ConnectionPool(host=self.__redis_addr, port=self.__redis_port, db=None, password=self.__redis_password)
            connection = redis.Redis(connection_pool=pool)
            return connection
        except Exception as e:
            print('redis connect err :%s' % e)

    def send_message(self, key, msg):
        zabbix_sender = self.__zabbix_sender, zabbix_conf = self.__zabbix_conf
        try:
            subprocess.Popen([zabbix_sender, "-c", zabbix_conf, "-k", key, "-o", msg],
                            shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
            # print "send zabbix success"
        except Exception as e:
            print(f"Something went wrong while exectuting zabbix_sender : {e}")

if __name__ == "__main__":

    redis_message = {'test1': ['127.0.0.1', 6379, None], 'test2': ['127.0.0.1', 6382, None]}
    name = sys.argv[1]
    if name == 'discovery':
        data = {
            "data": [
            ]
        }

        for message in redis_message.keys():
            # print(redis_message[message][1])
            data["data"].append({"{#REDISPORT}": redis_message[message][1]})
        print(json.dumps(data, sort_keys=True, indent=4))
    else:
        api = RedisApi(name, redis_message=redis_message)
        con = api.connect()
        if con.ping():
            print(0)
        else:
            print(1)
        messages = con.info()

        for key in messages.keys():
            if key.startswith('db'):
                pass
            else:
                monitor_key = f'Redis.Info[{key}, {redis_message[name][1]}]'

                print(monitor_key, ":", messages[key])
                # api.send_message(key=key, msg=messages[key])

おすすめ

転載: blog.51cto.com/phospherus/2465126