【运维--监控】zabbix自定义发现策略
目录:
- 前言
- 调整服务器
- 调整web模板
- 测试
前言
想想看系统监控工程师以前是一个多么高大上的职业,现在也渐渐消失了。因为自动化的普及,成功的实现了一个会开发,懂架构的人,可以干多少个技术岗位的工作。阿里出圈后,有多少公司,一群一群的高级人才想围住低级人才建立技术壁垒,把普通人打入到靠想法,靠体力活着。想法好,抽你9成水,体力抽你9.9成。
技术平台(地主)-->数据接口(卖铲子的人)--> 使用者(码农)--> 真正的业务(产出)-->干掉一名监控运维
感叹一下,回到正题。zabbix的自定义发现策略,真正的产出结果。本例以开源项目zabbix开发出自动添加为图片显示IP为例。展示如何干掉一名值班运维的。
调整服务器
1、脚本格式
bash版
#!/bin/bash
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | <br>ip_dev=( $(ip a| awk -F " |:" '/state UP/{printf "%s ",$3}' ) ) function zabbix_json(){ printf "{\n" printf '\t' "\"data\":[" length=${ #ip_dev[@]} for ((i=0;i<$length;i++)) do #printf "$i" host_ip=`ip a sh ${ip_dev[$i]} | awk -F " |/" '/inet /{printf "%s ",$6}' ` printf '\n\t\t{' printf "\"{#IF}\":\"${ip_dev[$i]}}\",\"{#HOSTIP}\":\"$host_ip\"}" if [ $i -lt $[$length-1] ]; then printf ',' fi done printf "\n\t]\n" printf "}\n" } zabbix_json $ip_dev |
golang版
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 | package main import ( "encoding/json" "fmt" "net" "os" "regexp" ) type netInfo struct { IF string `json: "{#IF}" ` HOSTIP string `json: "{#HOSTIP}" ` } // 处理address转化成字符 func addrToStr(l []net.Addr)(s string,err error){ count := 0 for _,v := range l{ matchIPv4, _ := regexp.MatchString( ".*64$" , v.String()) if matchIPv4 { continue } s1 := v.String()[:len(v.String())-3] if count > 0 { s = fmt.Sprintf( "%s %s" , s, s1) } else { s = fmt.Sprintf( "%s" , s1) } count += 1 } return } // 返回结果ip,name对应表 func InterInfo()([]netInfo, error){ var ips []netInfo inter, err := net.Interfaces() if err != nil { return nil, err } for _, item := range inter { byName, err :=net.InterfaceByName(item.Name) if err != nil { return nil, err } matchFlags, _ := regexp.MatchString( "up.*|.*UP,.*" , byName.Flags.String()) matchName, _ := regexp.MatchString( "Loopback.*|lo.*" , byName.Name) //fmt.Println(match, byName.Flags.String()) if (!matchFlags || matchName){ continue } var addresses []net.Addr addresses, err = byName.Addrs() data, err := addrToStr(addresses) ips = append(ips, netInfo{ byName.Name, data, }) } return ips, nil } func main(){ ips, err := InterInfo() if err != nil { fmt.Printf( "it is get net info fail.err is:%v" , err) os.Exit(1) } result,_ := json.Marshal(ips) fmt.Println(string(result)) } |
2、调整服务器添加监控
1 2 | cat /etc/zabbix/zabbix_agentd .d /userparameter_ip_linux .conf UserParameter=discovery.activeip, /bin/bash /etc/zabbix/script/discovery_network_ip .sh |
3、重启服务器
1 2 | systemctl restart zabbix-agent systemctl restart zabbix-server |
调整web模板
1、添加模板
2、添加自定义监控
自定义监控配置
过滤器配置
3、监控原型书写
监控原型--进程
out原型雷同配置,不在重复。
另外有其他需求可自行开发书写。这里就不在赘述了。
4、图形原型
模板完成。
测试
1、绑定主机
2、调试查看
3、成果展示
又一个监控工程师被干掉了,哎,什么时候能自己把自己干掉啊。ip就不给大家看了。多看源码,github真是个好网站。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】博客园携手 AI 驱动开发工具商 Chat2DB 推出联合终身会员
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步