跳至主要內容
使用zabbix-agent2自定义插件获取https证书过期时间

使用zabbix-agent2自定义插件获取https证书过期时间

转载自: 公众号运维开发故事 | wanger

需求

对经常维护网站的人来说,要经常跟https的证书打交道。一般https证书的有效期是一年,证书一旦过期,公司的损失会非常大。去年网易邮箱因为https证书忘记续期,导致大量用户无法正常使用邮箱就是个典型案例。什么时候想起来才去手动查一下也不现实,最好的方法是把过期时间监控起来,距离一定期限自动发送通知。


Clay大约 4 分钟监控Zabbix
6 常见问题

6 常见问题

Zabbix客户端日志出现(Not all processes could be identified)

场景:因为使用了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.) 解决方法 :


Clay小于 1 分钟监控Zabbix
1 zabbix4.4新功能

1 zabbix4.4新功能

探索Zabbix4.4新功能

https://www.zabbix.com/cn/whats_new_4_4

  • 新一代的Zabbix Agent

    • Go语言编写
    • 用于监控各种服务和应用的插件框架
    • 并发检查时确保状态正常(例如,保持持续的DB连接)
    • 内置时间调度器(scheduler ),支持灵活的时间间隔
    • 使用批量数据传输的高效的网络使用
    • 用即将支持的更多平台嵌入式替换Linux上现有的代理
  • 活动和告警功能升级:应用Webhooks和可编程逻辑

    • 该功能简化了与外部系统的双向集成,允许从Zabbix UI一键访问工单系统中的case,在聊天中创建消息等等。可使用内置的JavaScript引擎定义所有处理逻辑,与外部通知和工单系统集成得到了极大的改进。
  • 为Zabbix模板设置标准

    • 我们为模板引入了一组标准和定义明确的 准则。 对于所有模板的创建者和维护者以及所有Zabbix用户来说,统一标准非常重要。

      对XML/JSON文件的结构进行了极大的简化,仅使用文本编辑器即可手动编辑模板。大多数现有的模板都经过了改进以适应新的标准。

  • 官方支持TimescaleDB

    • 除了MySQL、PostgreSQL、Oracle和DB2之外,我们现在正式宣布官方支持TimescaleDB。 与传统的关系数据库相比,TimescaleDB有诸多有点:近乎线性的性能水平, 支持自动即时删除旧的历史数据,更容易维护等等。
  • 监控项和触发器的知识库

    • Zabbix 4.4提供了对监控项和触发器的更直观的描述。这些信息为工程师提供了巨大的帮助, 为他们提供了关于收集监控项的意义和目的、问题细节和触发器的解决指令等所有可能的细节。
  • 高级可视化功能

    • 仪表板和相关的小工具在许多方面得到了改进,简化了创建和管理的过程, 增加了只需单击鼠标即可修改小工具参数的功能。现在仪表板网格尺寸极佳可支持超宽屏幕和大屏幕墙。

      问题视图小工具增强支持聚合视图,并引入了一个新的小工具来显示图形原型。

      此外,所有小工具现在都可以在无标题模式下显示。

  • 条形图和聚合

    • Zabbix 4.4提供了条形图,graph widget现在支持使用各种聚合函数进行数据聚合。 这两个特性的结合使得长期数据分析和容量规划变得更加容易。
  • 官方支持更多新平台

    • SUSE Linux Enterprise Server 15
    • Debian 10
    • Raspbian 10
    • Mac OS/X
    • RHEL 8
    • 用于Windows agent的MSI

    请参阅下载 页面中的所有可用平台

  • 云端一键部署

    Zabbix容器或镜像已经上线以下国际主流云平台,国内版本即将依次上线:

  • 安全的自动注册功能

    • Zabbix的新版本支持可选的PSK加密,用于自动注册,并为添加的主机提供自动加密设置。 现在您可以将Zabbix设置为仅使用PSK,未加密或两者都允许自动注册网络设备。
  • 预处理功能升级:高级JSONPath

    • Zabbix现在支持JSONPath的高级排列,允许对JSON数据进行复杂的预处理,包括聚合和搜索。 预处理还可以用于低等级发现,这使得它成为一个非常强大的自动化发现工具。
  • 用户宏的描述

    • 用户宏命令是一个非常好的功能,它简化了Zabbix的配置,使大量的配置变得轻而易举。 对用户宏命令的描述支持将有助于记录每个宏命令的用途,使宏命令的管理更加容易。
  • 更高效高级的数据收集

    • 通过新的JSON格式的返回对象数组检查,WMI、JMX和ODBC相关项的数据收集和发现得到了改进。 我们还为VMWare监控增加了VMWare数据存储,为Linux平台增加了系统服务,为CSV到JSON的转换增加了新的预处理类型。

Clay大约 5 分钟监控Zabbix
10 Todolist

10 Todolist

待整理链接有:

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,


Clay小于 1 分钟监控Zabbix
8 activemq监控

8 activemq监控

zabbix旧版本可以用,新版本建议用官方模板

关闭被监控端的防火墙

activemq 防火墙的添加还是有问题,先把防火墙给关了,它好像是后续会再产生一个随机端口,进行数据的传输

zabbix_proxy安装java_gateway,

因为是基于JMX进行监控的

修改配置文件

配置./apache-activemq-5.11.1/conf/activemq.xml


Clay小于 1 分钟监控Zabbix
2 zabbix借助ansible安装

2 zabbix借助ansible安装

zabbix-server安装

  1. 下载roles
ansible-galaxy install dj-wasabi.zabbix-server

Clay大约 3 分钟监控Zabbix
7 用zabbix api批量添加web监控

7 用zabbix api批量添加web监控

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))


Clay大约 2 分钟监控Zabbix
4 MySQL监控模块

4 MySQL监控模块

zabbix旧版本可以用,新版本建议用官方模板

Template DB MySQL简介

应用集

MySQL

监控项

  1. MySQL begin operations per second(MySQL每秒开始操作)
  2. MySQL bytes received per second(从所有客户端接收的字节数)
  3. MySQL bytes sent per second(发送到所有客户端的字节数)
  4. MySQL commit operations per second(MySQL每秒提交操作)
  5. MySQL delete operations per second(MySQL每秒删除操作)
  6. MySQL insert operations per second(MySQL每秒插入操作)
  7. MySQL queries per second(MySQL每秒查询)
  8. MySQL rollback operations per second(MySQL每秒回滚操作)
  9. MySQL select operations per second(MySQL每秒选择操作)
  10. MySQL slow queries(MySQL慢查询)
  11. MySQL status(MySQL的存活状态)
  12. MySQL update operations per second(MySQL每秒更新操作)
  13. MySQL uptime(MySQL正常运行时间)
  14. MySQL version(MySQL的版本信息)

Clay大约 2 分钟监控Zabbix
5 Redis监控模块

5 Redis监控模块

zabbix旧版本可以用,新版本建议用官方模板

模板导入

打开“配置”-->“模板”-->"导入"

导入zax_redis文件夹下的redis_templates_for_zbx_3.4.xml文件


Clay小于 1 分钟监控Zabbix
2