zabbix监控全国天气实况

2024-01-23 02:30

本文主要是介绍zabbix监控全国天气实况,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

微信公众号:运维开发故事,作者:wanger

本文主要通过一些监控示例来简单介绍zabbix的http agent类型的监控以及map图的简单用法,我们可以通过一些网站查询天气的api来获取天气情况,大部分的地图软件也都支持天气查询,这里我简单介绍几个,有高德地图,百度地图,心知天气,YY天气,个人用的是YY天气,因为我的需求不高,他能轻易地满足我
YY天气api地址:http://www.yytianqi.com/api.html

创建HTTP agent类型的监控项

以创建北京天气的监控项为例

我们只要把请求的URL和键值填上就可以了

获取数据如下

我们可以根据获取的数据对json进行预处理

创建包含预处理的可依赖监控项

以监控天气信息为例

键值定义尽量规范,依赖项选择刚刚新建的http agent监控项

添加预处理步骤

根据刚才获取到的数据来获取tq的值

除此之外还需要定义气温、风力、风向、相对湿度,添加方法与上面相同

添加高温的触发器

编写脚本批量添加监控项和触发器

但是这样做要添加的监控项和触发器太多了,而且都是重复性的工作,这里我写了个脚本,来对各地城市的监控项和触发器进行批量添加,批量添加的好处是省时省力,而且减少出错概率。
实现思路是获取主机的接口id,并对城市进行循环添加监控项和触发器

#coding=utf-8
import requests,json
ApiUrl = 'http://192.168.1.100/api_jsonrpc.php'
header = {"Content-Type":"application/json"}
user="Admin"
password="zabbix"
city=[{"beijing":"CH010100"},{"shanghai":"CH020100"},{"tianjin":"CH030100"},{"chongqing":"CH040100"},{"haerbin":"CH050101"},{"changchun":"CH060101"},{"shenyang":"CH070101"},{"huhehaote":"CH080101"},{"shijiazhuang":"CH090101"},{"taiyuan":"CH100101"},{"xian":"CH110101"},{"jinan":"CH120101"},{"wulumuqi":"CH130101"},{"lasa":"CH140101"},{"xining":"CH150101"},{"lanzhou":"CH160101"},{"yinchuan":"CH170101"},{"zhengzhou":"CH180101"},{"nanjing":"CH190101"},{"wuhan":"CH200101"},{"hangzhou":"CH210101"},{"hefei":"CH220101"},{"fuzhou":"CH230101"},{"nanchang":"CH240101"},{"changsha":"CH250101"},{"guiyang":"CH260101"},{"chengdu":"CH270101"},{"guangzhou":"CH280101"},{"kunming":"CH290101"},{"nanning":"CH300101"},{"haikou":"CH310101"},{"hongkong":"CH320101"},{"aomen":"CH330101"},{"taibei":"CH340101"}]
def get_interface(auth):data ={"jsonrpc": "2.0","method": "hostinterface.get","params": {"output": "extend","hostids": "10343"},"auth": auth,  "id": 1}gethost=requests.post(url=ApiUrl,headers=header,json=data)return json.loads(gethost.content)["result"][0]["interfaceid"]
def gettoken():data = {"jsonrpc": "2.0","method": "user.login","params": {"user": user,"password": password},"id": 1,"auth": None}auth=requests.post(url=ApiUrl,headers=header,json=data)return json.loads(auth.content)["result"]
def createitemandtrigger(auth,interface):for dic in city:for key,value in dic.items():data={"jsonrpc": "2.0","method": "item.create","params": {"url":"http://api.yytianqi.com/observe","query_fields": [{"city":"%s" %value},{"key": "iopesm5a0uhqwer"}],"interfaceid": "%s" %interface,"type":"19","hostid":"10343","delay":"5m","key_":"%s" %key,"name":"%s" %key,"value_type":"1","output_format":"0","timeout":"3s"},"auth": auth,"id": 1}httpagent=requests.post(url=ApiUrl,headers=header,json=data)httpagent=json.loads(httpagent.content)['result']['itemids'][0]print(httpagent)data={"jsonrpc": "2.0","method": "item.create","params": {"hostid": "10343","name": "%s-tq" %key,"key_": "%s-tq" %key,"type": "18","master_itemid": httpagent,"value_type": "1","preprocessing": [{"type": "12","params": "$.data.tq","error_handler": "1","error_handler_params": ""}]},"auth": auth,"id": 1}dependqw=requests.post(url=ApiUrl,headers=header,json=data)print(dependqw.content)data={"jsonrpc": "2.0","method": "item.create","params": {"hostid": "10343","name": "%s-fl" %key,"key_": "%s-fl" %key,"type": "18","master_itemid": httpagent,"value_type": "1","preprocessing": [{"type": "12","params": "$.data.fl","error_handler": "1","error_handler_params": ""}]},"auth": auth,"id": 1}dependfl=requests.post(url=ApiUrl,headers=header,json=data)data={"jsonrpc": "2.0","method": "item.create","params": {"hostid": "10343","name": "%s-qw" %key,"key_": "%s-qw" %key,"type": "18","master_itemid": httpagent,"value_type": "3","preprocessing": [{"type": "12","params": "$.data.qw","error_handler": "1","error_handler_params": ""}]},"auth": auth,"id": 1}dependqw=requests.post(url=ApiUrl,headers=header,json=data)data={"jsonrpc": "2.0","method": "item.create","params": {"hostid": "10343","name": "%s-fx" %key,"key_": "%s-fx" %key,"type": "18","master_itemid": httpagent,"value_type": "1","preprocessing": [{"type": "12","params": "$.data.fx","error_handler": "1","error_handler_params": ""}]},"auth": auth,"id": 1}dependfx=requests.post(url=ApiUrl,headers=header,json=data)data={"jsonrpc": "2.0","method": "item.create","params": {"hostid": "10343","name": "%s-sd" %key,"key_": "%s-sd" %key,"type": "18","master_itemid": httpagent,"value_type": "0","preprocessing": [{"type": "12","params": "$.data.sd","error_handler": "1","error_handler_params": ""}]},"auth": auth,"id": 1}dependsd=requests.post(url=ApiUrl,headers=header,json=data)data={"jsonrpc": "2.0","method": "trigger.create","params": [{"description": "%s温度有点高" %key,"expression": "{tianqi:%s-qw.last()}>30" %key,"opdata": "当前气温:{ITEM.LASTVALUE}","priority": 3,"manual_close": 1}],"auth": auth,"id": 1}triggercreate=requests.post(url=ApiUrl,headers=header,json=data)return json.loads(dependqw.content)#["result"]
auth=gettoken()
interface=get_interface(auth)
createhttpitem(auth,interface)

实现效果如下



制作map图

首先创建背景图片

这里我添加了一张中国地图

创建map图

对map图进行编辑

标签用于显示监控的数据,添加高温的触发器,当触发高温报警后,图标由绿点会变成红绿交替闪动,这里以北京气温为例

最终实现效果如下

报警效果如下


欢迎关注微信公众号“运维开发故事”

这篇关于zabbix监控全国天气实况的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/634966

相关文章

python编写朋克风格的天气查询程序

《python编写朋克风格的天气查询程序》这篇文章主要为大家详细介绍了一个基于Python的桌面应用程序,使用了tkinter库来创建图形用户界面并通过requests库调用Open-MeteoAPI... 目录工具介绍工具使用说明python脚本内容如何运行脚本工具介绍这个天气查询工具是一个基于 Pyt

JVisualVM之Java性能监控与调优利器详解

《JVisualVM之Java性能监控与调优利器详解》本文将详细介绍JVisualVM的使用方法,并结合实际案例展示如何利用它进行性能调优,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全... 目录1. JVisualVM简介2. JVisualVM的安装与启动2.1 启动JVisualVM2

基于Python实现智能天气提醒助手

《基于Python实现智能天气提醒助手》这篇文章主要来和大家分享一个实用的Python天气提醒助手开发方案,这个工具可以方便地集成到青龙面板或其他调度框架中使用,有需要的小伙伴可以参考一下... 目录项目概述核心功能技术实现1. 天气API集成2. AI建议生成3. 消息推送环境配置使用方法完整代码项目特点

使用Python实现实时金价监控并自动提醒功能

《使用Python实现实时金价监控并自动提醒功能》在日常投资中,很多朋友喜欢在一些平台买点黄金,低买高卖赚点小差价,但黄金价格实时波动频繁,总是盯着手机太累了,于是我用Python写了一个实时金价监控... 目录工具能干啥?手把手教你用1、先装好这些"食材"2、代码实现讲解1. 用户输入参数2. 设置无头浏

使用Python实现IP地址和端口状态检测与监控

《使用Python实现IP地址和端口状态检测与监控》在网络运维和服务器管理中,IP地址和端口的可用性监控是保障业务连续性的基础需求,本文将带你用Python从零打造一个高可用IP监控系统,感兴趣的小伙... 目录概述:为什么需要IP监控系统使用步骤说明1. 环境准备2. 系统部署3. 核心功能配置系统效果展

AJAX请求上传下载进度监控实现方式

《AJAX请求上传下载进度监控实现方式》在日常Web开发中,AJAX(AsynchronousJavaScriptandXML)被广泛用于异步请求数据,而无需刷新整个页面,:本文主要介绍AJAX请... 目录1. 前言2. 基于XMLHttpRequest的进度监控2.1 基础版文件上传监控2.2 增强版多

Linux使用nload监控网络流量的方法

《Linux使用nload监控网络流量的方法》Linux中的nload命令是一个用于实时监控网络流量的工具,它提供了传入和传出流量的可视化表示,帮助用户一目了然地了解网络活动,本文给大家介绍了Linu... 目录简介安装示例用法基础用法指定网络接口限制显示特定流量类型指定刷新率设置流量速率的显示单位监控多个

通过prometheus监控Tomcat运行状态的操作流程

《通过prometheus监控Tomcat运行状态的操作流程》文章介绍了如何安装和配置Tomcat,并使用Prometheus和TomcatExporter来监控Tomcat的运行状态,文章详细讲解了... 目录Tomcat安装配置以及prometheus监控Tomcat一. 安装并配置tomcat1、安装

C#实现系统信息监控与获取功能

《C#实现系统信息监控与获取功能》在C#开发的众多应用场景中,获取系统信息以及监控用户操作有着广泛的用途,比如在系统性能优化工具中,需要实时读取CPU、GPU资源信息,本文将详细介绍如何使用C#来实现... 目录前言一、C# 监控键盘1. 原理与实现思路2. 代码实现二、读取 CPU、GPU 资源信息1.

使用zabbix进行监控网络设备流量

《使用zabbix进行监控网络设备流量》这篇文章主要为大家详细介绍了如何使用zabbix进行监控网络设备流量,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录安装zabbix配置ENSP环境配置zabbix实行监控交换机测试一台liunx服务器,这里使用的为Ubuntu22.04(