zoukankan      html  css  js  c++  java
  • 【运维--监控】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 "{ " printf ' '""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 ' {' printf ""{#IF}":"${ip_dev[$i]}}","{#HOSTIP}":"$host_ip"}" if [ $i -lt $[$length-1] ];then printf ',' fi done printf " ] " printf "} " } 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真是个好网站。

  • 相关阅读:
    编程总结3
    编程总结2
    编程总结1
    对我影响最深的老师
    自我介绍
    BFC 规则及解决的问题?
    简述 CSS 精灵图原理,及优缺点?
    等高布局、圣杯布局、双飞翼布局的实现原理
    CSS 基本选择器有哪些?
    CSS 引入方式有哪些?
  • 原文地址:https://www.cnblogs.com/wangshuyang/p/13368055.html
Copyright © 2011-2022 走看看