【运维--监控】zabbix自定义发现策略

目录:

  • 前言
  • 调整服务器
  • 调整web模板
  • 测试

前言

   想想看系统监控工程师以前是一个多么高大上的职业,现在也渐渐消失了。因为自动化的普及,成功的实现了一个会开发,懂架构的人,可以干多少个技术岗位的工作。阿里出圈后,有多少公司,一群一群的高级人才想围住低级人才建立技术壁垒,把普通人打入到靠想法,靠体力活着。想法好,抽你9成水,体力抽你9.9成。

  技术平台(地主)-->数据接口(卖铲子的人)--> 使用者(码农)--> 真正的业务(产出)-->干掉一名监控运维

  感叹一下,回到正题。zabbix的自定义发现策略,真正的产出结果。本例以开源项目zabbix开发出自动添加为图片显示IP为例。展示如何干掉一名值班运维的。

调整服务器

1、脚本格式

bash版

   #!/bin/bash


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版

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、调整服务器添加监控

cat /etc/zabbix/zabbix_agentd.d/userparameter_ip_linux.conf 
UserParameter=discovery.activeip,/bin/bash /etc/zabbix/script/discovery_network_ip.sh

  

3、重启服务器

systemctl restart zabbix-agent
systemctl restart zabbix-server

调整web模板

1、添加模板

 

 2、添加自定义监控

 

 自定义监控配置

 

 过滤器配置

 3、监控原型书写

 

 监控原型--进程

 

 out原型雷同配置,不在重复。

另外有其他需求可自行开发书写。这里就不在赘述了。

4、图形原型

 

 模板完成。

测试

1、绑定主机

 

 2、调试查看

 

 3、成果展示

 

 又一个监控工程师被干掉了,哎,什么时候能自己把自己干掉啊。ip就不给大家看了。多看源码,github真是个好网站。

 

posted @ 2020-07-23 18:46  shuyang  阅读(88)  评论(1编辑  收藏