使用zabbix-agent2自定义插件获取https证书过期时间
转载自: 公众号运维开发故事 | wanger
需求
对经常维护网站的人来说,要经常跟https的证书打交道。一般https证书的有效期是一年,证书一旦过期,公司的损失会非常大。去年网易邮箱因为https证书忘记续期,导致大量用户无法正常使用邮箱就是个典型案例。什么时候想起来才去手动查一下也不现实,最好的方法是把过期时间监控起来,距离一定期限自动发送通知。
转载自: 公众号运维开发故事 | wanger
对经常维护网站的人来说,要经常跟https的证书打交道。一般https证书的有效期是一年,证书一旦过期,公司的损失会非常大。去年网易邮箱因为https证书忘记续期,导致大量用户无法正常使用邮箱就是个典型案例。什么时候想起来才去手动查一下也不现实,最好的方法是把过期时间监控起来,距离一定期限自动发送通知。
场景:因为使用了netstat -p参数。
权限问题,zabbix_agentd是zabbix用户启动的,默认不能执行netstat -p等命令,导致从服务器取到的自动发现脚本为空
(Not all processes could be identified, non-owned process info will not be shown, you would have to be root to see it all.) 解决方法 :
探索Zabbix4.4新功能
https://www.zabbix.com/cn/whats_new_4_4
新一代的Zabbix Agent
活动和告警功能升级:应用Webhooks和可编程逻辑
为Zabbix模板设置标准
我们为模板引入了一组标准和定义明确的 准则。 对于所有模板的创建者和维护者以及所有Zabbix用户来说,统一标准非常重要。
对XML/JSON文件的结构进行了极大的简化,仅使用文本编辑器即可手动编辑模板。大多数现有的模板都经过了改进以适应新的标准。
官方支持TimescaleDB
监控项和触发器的知识库
高级可视化功能
仪表板和相关的小工具在许多方面得到了改进,简化了创建和管理的过程, 增加了只需单击鼠标即可修改小工具参数的功能。现在仪表板网格尺寸极佳可支持超宽屏幕和大屏幕墙。
问题视图小工具增强支持聚合视图,并引入了一个新的小工具来显示图形原型。
此外,所有小工具现在都可以在无标题模式下显示。
条形图和聚合
官方支持更多新平台
请参阅下载 页面中的所有可用平台
云端一键部署
Zabbix容器或镜像已经上线以下国际主流云平台,国内版本即将依次上线:
Google Cloud Platform
安全的自动注册功能
预处理功能升级:高级JSONPath
用户宏的描述
更高效高级的数据收集
待整理链接有:
tomcat监控自动重启脚本:https://mp.weixin.qq.com/s?__biz=MzU2MDg5NzYzNA==&mid=2247483717&idx=1&sn=f3404f8b58d260cf29bb465525a0c391&chksm=fc004a48cb77c35e4a0646d82b015ea76ab5642c3dda935f75845de449fecb7ea64e8c501d0b&scene=21#wechat_redirect
tomcat,jmx监控:https://www.cnblogs.com/ssgeek/p/9299273.html,
zabbix旧版本可以用,新版本建议用官方模板
activemq 防火墙的添加还是有问题,先把防火墙给关了,它好像是后续会再产生一个随机端口,进行数据的传输
因为是基于JMX进行监控的
配置./apache-activemq-5.11.1/conf/activemq.xml
ansible-galaxy install dj-wasabi.zabbix-server
python脚本如下:
vim zabbix_agent.py
# ~*~ coding:utf-8 ~*~
from zabbix_api import ZabbixAPI
import sys
import json
ZABBIX_SREVER = "http://192.168.162.122"
USERNAME = "Admin"
PASSWORD = "zabbix"
#HOSTNAME = "sh_ylf_15"
#HOSTNAME = "h5_web_monitor"
HOSTNAME = sys.argv[4]
urlname = sys.argv[1]
url = sys.argv[2]
delay = sys.argv[3]
# 登录
def login(ZABBIX_SREVER, USERNAME, PASSWORD):
zapi = ZabbixAPI(ZABBIX_SREVER)
zapi.login(USERNAME, PASSWORD)
return zapi
# 获取主机id
def gethostid(auth, HOSTNAME):
json_obj = ZabbixAPI.json_obj(auth, 'host.get', params={"filter": {"host": HOSTNAME}})
request = ZabbixAPI.do_request(auth, json_obj)
if request['result']:
return request['result'][0]['hostid']
else:
print("找不到该主机")
sys.exit(1)
# 获取应用级id
def getapplicationid(auth, hostid):
# try:
# json_obj = ZabbixAPI.json_obj(auth, 'application.create', params={"name": "Web监测","hostid": hostid})
# ZabbixAPI.do_request(auth, json_obj)
# except Exception as e:
# print(e)
json_obj = ZabbixAPI.json_obj(auth, 'application.get', params={"hostids": hostid})
request = ZabbixAPI.do_request(auth, json_obj)
for num in range(0, len(request['result'])):
if request['result'][num]['name'] == 'Web':
return request['result'][num]['applicationid']
# 增加web监控
def create_web_scenario(auth, urlname, url, hostid, applicationid, delay):
json_obj = ZabbixAPI.json_obj(auth, 'httptest.get', params={"filter": {"name": urlname}})
request = ZabbixAPI.do_request(auth, json_obj)
if request['result']:
print('该web监控已经添加过了')
else:
try:
json_obj = ZabbixAPI.json_obj(auth, 'httptest.create',
params={"name": urlname, "hostid": hostid, "applicationid": applicationid,
"delay": delay, "retries": '1', "steps": [
{'name': urlname, 'url': url, 'timeout': '10', 'status_codes': '200',
'no': '1'}]})
ZabbixAPI.do_request(auth, json_obj)
except Exception as e:
print(e)
sys.exit(1)
# 增加触发器
def create_trigger(auth, HOSTNAME, urlname, url):
expression = "{" + "{0}:web.test.fail[{1}].avg(#3)".format(HOSTNAME, urlname) + "}" + ">=1"
try:
json_obj = ZabbixAPI.json_obj(auth, 'trigger.create',
params={"description": "{0}访问失败".format(urlname), "expression": expression,
"priority": 5, "url": url})
ZabbixAPI.do_request(auth, json_obj)
except Exception as e:
print(e)
sys.exit(1)
expression = "{" + "{0}:web.test.rspcode[{1},{1}].last(0)".format(HOSTNAME, urlname) + "}" + "<>200"
try:
json_obj = ZabbixAPI.json_obj(auth, 'trigger.create',
params={"description": "{0}访问异常".format(urlname), "expression": expression,
"priority": 4, "url": url})
ZabbixAPI.do_request(auth, json_obj)
except Exception as e:
print(e)
sys.exit(1)
# 获取监控项id
def getitem(auth, hostid, urlname):
json_obj = ZabbixAPI.json_obj(auth, 'item.get',
params={"hostids": hostid, "webitems": "1",
"filter": {"name": "Response code for step \"$2\" of scenario \"$1\".",
"key_": "web.test.rspcode[{0},{1}]".format(urlname, urlname)}})
request = ZabbixAPI.do_request(auth, json_obj)
return request["result"][0]["itemid"]
# 增加图形
def create_graph(auth, urlname, hostid):
try:
itemid = getitem(auth, hostid, urlname)
json_obj = ZabbixAPI.json_obj(auth, 'graph.create',
params={"name": "h5_{0}状态显示".format(urlname), "width": 900, "height": 200,
"gitems": [{"itemid": itemid, "color": "008800"}]})
ZabbixAPI.do_request(auth, json_obj)
except Exception as e:
print(e)
sys.exit(1)
def main():
auth = login(ZABBIX_SREVER, USERNAME, PASSWORD)
hostid = gethostid(auth, HOSTNAME)
applicationid = getapplicationid(auth, hostid)
create_web_scenario(auth, urlname, url, hostid, applicationid, delay)
create_trigger(auth, HOSTNAME, urlname, url)
create_graph(auth, urlname, hostid)
if __name__ == '__main__':
main()
# json_obj = ZabbixAPI.json_obj(auth, 'httptest.get', params={"applicationids": applicationid})
# request = ZabbixAPI.do_request(auth, json_obj)
# print(json.dumps(request, ensure_ascii=False, indent=4))
进入zabbix-web,点击Administrator-->Media types-->Create Media type
推荐文章
zabbix旧版本可以用,新版本建议用官方模板
MySQL
zabbix旧版本可以用,新版本建议用官方模板
打开“配置”-->“模板”-->"导入"
导入zax_redis
文件夹下的redis_templates_for_zbx_3.4.xml
文件