zabbix监听nginx-rtmp

nginx-rtmp开启stats

# nginx(--add-module=nginx-rtmp-module-master)

nginx.conf:
    server {
        listen 81;
        location /stat {
            rtmp_stat all;
        }
    }

http://127.0.0.1:81/stat

 

stat状态值详解

codec: 编码

bits/s: 码流

size: 分辨率

fps: 每秒传输帧数

freq: 音频频率

chan: 声道数

定义zabbix监控item key

  vim etc/zabbix_agentd.conf.d/userparameter_live.conf

UserParameter=discovery_live.stream,/usr/local/zabbix-agent/scripts/discovery_stream.py
UserParameter=live.stream[*],/usr/local/zabbix-agent/scripts/stream.py $1

stream.py  # 判断In bits/s值(视音频合计码流)。0则rtmp断流,非0则正常

#!/usr/bin/python2.7
# -*- coding: utf-8 -*-

'''
    curl的直播流状态值写入本地CACHE文件 后续具体的直播频道流值从该文件获取 CACHE文件根据ctime一分钟更新一次
'''

import os
import re
import sys
import time
import urllib2

class Live(object):

    def __init__(self,url,CACHETTL,CACHE,STREAM):
        self.url = url
        self.CACHETTL = CACHETTL
        self.CACHE = CACHE
        self.STREAM = STREAM

    def generate_cache(self):
        TIMENOW = int(time.time())
        if os.path.isfile(self.CACHE) and os.path.getsize(self.CACHE) > 0:
            TIMECACHE = int(os.path.getctime(self.CACHE))
        else:
            TIMECACHE = 0
        if (TIMENOW - TIMECACHE) > self.CACHETTL:
            try:
                r = urllib2.urlopen(self.url,timeout=1)
                with open(self.CACHE,'w') as f:
                    f.write(r.read())
            except urllib2.URLError, e:
                print 0  # 给zabbix触发直播流down报警的值
                exit(1)  # 退出程序 不让从CACHE文件获取值
    def get_status(self):
        self.generate_cache()
        with open(self.CACHE,'r') as f:
            r = f.read()
            name = re.findall(r'<name>(.*)</name>',r)[1:]
            flow = re.findall(r'<bw_in>(.*)</bw_in>',r)[1:]
            stream = dict(zip(name,flow))
            print(stream[self.STREAM])

if __name__ == "__main__":
    url = "http://127.0.0.1:81/stat"  # 直播频道流状态值url
    CACHETTL = 60  # 本地CACHE文件更新时间间隔
    CACHE = "/tmp/nginx-rtmp-status.cache"  # 本地CACHE文件绝对路径
    STREAM = sys.argv[1]  # 某个具体直播频道
    status = Live(url,CACHETTL,CACHE,STREAM)
    status.get_status()

zabbix通过自动发现规则,根据脚本自动动态的定义监控的key,再根据key获取值

discovery_stream.py动态获取key

#!/usr/bin/python2.7
# -*- coding: utf-8 -*-
import json
import re
def get_name():
    with open("/tmp/nginx-rtmp-status.cache",'r') as f:
        r = f.read()
        name = re.findall(r'<name>(.*)</name>',r)[1:]
        mlist=[]
        for i in name:
            pdict={}
            pdict['{#NAME}'] = i
            mlist.append(pdict)
        result = {}
        result['data'] = mlist
        print(json.dumps(result,sort_keys=True,indent=2))

get_name()

重启zabbix_agentd客户端使监控key生效

客户端测试

zabbix页面添加自动发现规则

添加监控原型

注意:[]内需要大写,否则会报错

设置触发器

 

然后查看监控项,可以看到我们定义的动态的key已经生成,失效的key到期会自动删除

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值