首页 > 编程语言 >Zabbix02 Zabbix告警通知, 故障自愈, 主动被动模式, JAVA应用网络设备等的监控及分布式监控

Zabbix02 Zabbix告警通知, 故障自愈, 主动被动模式, JAVA应用网络设备等的监控及分布式监控

时间:2024-09-07 22:04:52浏览次数:7  
标签:JAVA 被动模式 点击 agent server zabbix 监控 echo root

图形 Graphs

#点击web端配置下的模板,选择模板对应的图形,点击右上角创建图标
#输入名称     TCP状态
#监控项选择添加,最后点添加

#点击监测下关联该模板的主机,点击图形,就能看到添加的图形

#仪表盘为图形的组合
#配置下模板里,点击仪表盘栏,点击创建仪表盘,构件可把之前画的图添加出来,也可添加其他值等

 

用户 Users 和组 Groups 管理

用户: 指定用户的Zabbix Web 登录身份
用户组:指定可访问资源的范围,比如哪些主机可以被访问到
角色: 加入角色可以控制用户是否有管理能力,还有更多的细小权限分派,比如:具体某个菜单项的访问

 

告警通知

E-mail
即时消息:企业微信,钉钉,飞书
短信    (不推荐,成本高,还要申请短信模板)
邮箱通知
#邮箱开启SMTP功能

#左侧管理下的媒介,点击创建媒介类型
输入名称     163邮件通知
输入SMTP服务器:    smtp.163.com
SMTP服务器端口    465    (加密的端口)
安全连接        SSL/TLS
SMTP HELO(打招呼的通知):    163.com
SMTP电邮: 邮箱地址  [email protected]
SSL验证对端        √
SSL验证主机        √
认证  用户名和密码:密码为邮箱的授权码(公司邮箱可能没授权码,那就是登录密码)
[email protected]
PFJWxxxxxxxx
#点击消息模版,改成中文的
#可以修改两个消息模板
# 问题
主题: 告警: {EVENT.NAME}
告警主机:{HOST.NAME1} <br>
告警服务: {ITEM.NAME1} <br>
告警Key1: {ITEM.KEY1}:{ITEM.VALUE1}<br>
告警Key2: {ITEM.KEY2}:{ITEM.VALUE2}<br>
严重级别: {TRIGGER.SEVERITY}<br>
# 恢复 Problem Recovery
主题: 恢复: {EVENT.DURATION}: {EVENT.NAME}
恢复主机:{HOST.NAME1}<br>
恢复服务: {ITEM.NAME1}<br>
恢复Key1:{ITEM.KEY1}:{ITEM.VALUE1}<br>
恢复Key2: {ITEM.KEY2}:{ITEM.VALUE2}<br>
#点击添加
#此时可以在媒介中在已创建的邮件通知后面点击测试

#在管理下用户,点击用户选择告警媒介,添加之前创建的邮件通知,设置邮箱

#在配置下动作,选择触发器动作,点击创建动作(这里可以用开启默认,也会发送媒介)
#输入名字,添加条件,选择触发器
#点击操作,添加操作,步骤可执行几次,下面是当中间隔时间。
#发送用户选择,仅发送选择之前添加的邮箱通知,点击添加
可在步骤后添加步骤发给领导邮箱(相当于没解决,发给领导)
#下面恢复操作,也可以发,点击添加

#完成,之后发生异常和恢复都会受到邮件

邮件告警方法2

利用脚本方式进行邮件告警

[root@zabbix-server ~]# cat /usr/lib/zabbix/alertscripts/mail.sh
#!/bin/bash
#
#********************************************************************
#Author:           wangxiaoxxxx
#QQ:               2930xxxx
#Date:             2020-02-31
#FileName:         mail.sh
#URL:               http://www.wangxiaochun.com
#Description:       The test script
#Copyright (C):     2020 All rights reserved
#********************************************************************
email_send='[email protected]'
email_passwd='dgezyimkdsxxxxx'
email_smtp_server='smtp.qq.com'
. /etc/os-release
msg_error() {
  echo -e "\033[1;31m$1\033[0m"
}
msg_info() {
  echo -e "\033[1;32m$1\033[0m"
}
msg_warn() {
  echo -e "\033[1;33m$1\033[0m"
}
color () {
    RES_COL=60
    MOVE_TO_COL="echo -en \\033[${RES_COL}G"
    SETCOLOR_SUCCESS="echo -en \\033[1;32m"
    SETCOLOR_FAILURE="echo -en \\033[1;31m"
    SETCOLOR_WARNING="echo -en \\033[1;33m"
    SETCOLOR_NORMAL="echo -en \E[0m"
    echo -n "$1" && $MOVE_TO_COL
    echo -n "["
    if [ $2 = "success" -o $2 = "0" ] ;then
        ${SETCOLOR_SUCCESS}
        echo -n $" OK "    
    elif [ $2 = "failure" -o $2 = "1" ] ;then 
        ${SETCOLOR_FAILURE}
        echo -n $"FAILED"
    else
        ${SETCOLOR_WARNING}
        echo -n $"WARNING"
    fi
    ${SETCOLOR_NORMAL}
    echo -n "]"
    echo
}
install_sendemail () {
    if [[ $ID =~ rhel|centos|rocky ]];then
       rpm -q sendemail &> /dev/null || yum install -y sendemail
    elif [ $ID = 'ubuntu' ];then
       dpkg -l |grep -q sendemail || { apt update && apt install -y libiosocket-ssl-perl libnet-ssleay-perl sendemail ; } 
    else
       color "不支持此操作系统,退出!" 1
        exit
    fi
}
send_email () {
   local email_receive="$1"
   local email_subject="$2"
   local email_message="$3"
   sendemail -f $email_send -t $email_receive -u $email_subject -m
$email_message -s $email_smtp_server -o message-charset=utf-8 -o tls=yes -xu
$email_send -xp $email_passwd -o message-content-type=html
   [ $? -eq 0 ] && color "邮件发送成功!" 0 || color "邮件发送失败!" 1
}
if [ $# -ne 3 ];then 
   color "脚本参数不正确!" 1
   msg_info "Usage: `basename $0` <mail_address> <subject> <message>"
    exit 1
fi
install_sendemail 
send_email "$1" "$2" "$3"
[root@zabbix-server ~]# chmod +x /usr/lib/zabbix/alertscripts/mail.sh

#zabbix server端
#把发送邮件脚本放到 /usr/lib/zabbix/alertscripts/  路径下,并给与执行权限
#在管理下媒介,点创建媒介类型。类型选脚本,输入脚本名称
#添加参数   宏定义
{ALERT.SENDTO}        #收件人
{ALERT.SUBJECT}        #标题
{ALERT.MESSAGE}
#点击模板修改,和上述一致

 

微信告警

注册企业微信,记下企业ID
创建通讯录,建一个运维部
点击运维管理,创建应用,记下Secret

#企业微信发送脚本
[root@zabbix-server alertscripts]#cat wechat.sh 
#!/bin/bash
#
#********************************************************************
#Author:           wangxiaxxxxx
#QQ:               2930xxxx
#FileName:         wechat.sh
#URL:               http://www.wangxiaochun.com
#Description:       Send message from wechat for zabbix monitor
#Copyright (C):     2020 All rights reserved
#********************************************************************
CorpID="ww644a0d9xxxxxx"                             #我的企业下面的CorpID
Secret="cGp4gHUpHLL1KQZY5abM3panxxxxxxxxxxx"    #创建的应用那里的Secret
agentid=1000003                                         #改为 AgentId 在创建的应用可
以查看
#PartyID=1                                             #通讯录中的部门ID,可选项
GURL="https://qyapi.weixin.qq.com/cgi-bin/gettoken?
corpid=$CorpID&corpsecret=$Secret"
Token=$(/usr/bin/curl -s -G $GURL |awk -F\": '{print $4}'|awk -F\" '{print $2}')
#echo $Token
PURL="https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=$Token"

function body(){
   local userid=$1                                 #脚本的第1个参数为接收微信的企业用户帐号,在通讯录中可以查看
    #local partyid=$PartyID          
   local subject=$2                                #脚本的第2个参数,表示消息主题
   local msg=$(echo "$@" | cut -d" " -f3-)         #脚本的第3个参数,表示消息正文
   printf '{\n'
   printf '\t"touser": "'"$userid"\"",\n"
    #printf '\t"toparty": "'"$PartyID"\"",\n"
   printf '\t"msgtype": "text",\n'
   printf '\t"agentid": "'"$agentid"\"",\n"
   printf '\t"text": {\n'
   printf '\t\t"content": "'"$subject\n\n$msg"\""\n"
   printf '\t},\n'
   printf '\t"safe":"0"\n'
   printf '}\n'
}
/usr/bin/curl --data-ascii "$(body $*)" $PURL

#把脚本放到 /usr/lib/zabbix/alertscripts/  路径下,并给与执行权限
#在管理下媒介,点创建媒介类型。类型选脚本,输入脚本名称
#添加参数   宏定义
{ALERT.SENDTO}        #收件人
{ALERT.SUBJECT}        #标题
{ALERT.MESSAGE}
#点击模板修改,和上述一致

 

实现故障自愈功能

Zabbix Agent 开启远程命令功能

#agent端
[root@zabbix-agent ~]#vim /etc/zabbix/zabbix_agentd.conf 
AllowKey=system.run[*] #开启执行功能,此项适合zabbix5.0版本以上,agent2默认没有配置,需要手工配置,用于代替早期版本的中EnableRemoteCommands
UnsafeUserParameters=1  #允许远程执行命令的时候使用不安全的参数(特殊字符串,如: \ ' * ? [] {} ~ $ ! & ; ( ) < > 等 )    #1表示允许,默认为0不允许

#因为agent使用zabbix账号,没法执行重启服务操作,这里通过给zabbix账号sudo权限
[root@zabbix-agent ~]#vi /etc/sudoers    #文件只读  保存:wq!
#注意:NOPASSWD:后面有空格  表示sudo不用输密码
zabbix ALL=(ALL)   NOPASSWD: ALL
#检查语法
[root@zabbix-agent ~]#visudo -c

[root@zabbix-agent ~]#systemctl restart zabbix-agent.service

添加脚本 (Zabbix 6.0 )

#web端左侧管理下点击脚本,创建脚本
#输入名称  nginx服务重启
类型为脚本
执行在zabbix客户端
命令:
sudo systemctl restart nginx
#点击添加

#web端左侧配置下动作,触发器动作
#创建动作或已有动作上,点击操作,点击添加操作,操作可选nginx服务重启
目标列表: 当前主机打钩, 点击添加即可

#自此实现触发自愈

 

Zabbix 主动与被动模式

主动模式可以降低zabbix服务端性能消耗,提高并发

#agent端开启主动模式
[root@zabbix-agent ~]#vim /etc/zabbix/zabbix_agentd.conf 
ServerActive=10.0.0.151    #多个用逗号隔开
Hostname=10.0.0.152    #必须和配置下主机里主机设置的主机名称相同

[root@zabbix-server ~]#systemctl restart zabbix-agent.service

#web端配置下主机,打开主机把之前的被动模板删了,要用主动模式下的模板 
这里选Linux by Zabbix agent active(带active字样,本质里面的监控项是active的)
#点更新

#服务端查看日志
[root@zabbix-server ~]#tail /var/log/zabbix/zabbix_server.log

 

监控 JAVA 程序

这里以监控tomcat为例

 安装 tomcat
#agent端
[root@zabbix-agent ~]#apt update && apt install tomcat9

开启 JMX 监控

#查找catalina.sh文件路径
[root@zabbix-agent ~]#dpkg -L tomcat9|grep cata    #没找到
[root@zabbix-agent ~]#dpkg -L tomcat9-common |grep cata
/usr/share/tomcat9/bin/catalina.sh
...

#开启JMX功能
[root@ubuntu2204 ~]#vim /usr/share/tomcat9/bin/catalina.sh
......
CATALINA_OPTS="$CATALINA__OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=12345 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=10.0.0.152"    #被监听的地址
[root@zabbix-agent ~]#systemctl restart tomcat9

部署 Java Gateway 服务器

#在zabbix官网下载,可以选 版本    Java Gateway   显示安装步骤

#这里直接在zabbix server端安装java gateway(安装会显示java不存在,没事的)
apt install zabbix-java-gateway    #上面的步骤之前装过了,直接从一步开始
#查看状态
[root@zabbix-server ~]#systemctl status zabbix-java-gateway.service

配置 Zabbix Server 支持 Java gateway

#zabbix server端
#修改server端配置(编译安装zabbix server的位置)
[root@zabbix-server ~]#vim /apps/zabbix_server/etc/zabbix_server.conf
#修改server端配置(包安装zabbix server的位置)
[root@zabbix-server ~]#vim /etc/zabbix/zabbix_server.conf
JavaGateway=127.0.0.1     #指向JAVA gateway主机
StartJavaPollers=2        #指定开启的进程数,默认为0,即不开启,所以必须修改此行
#JavaGatewayPort=10052    #指定端口,此为默认值,可不修改

[root@zabbix-server ~]#systemctl restart zabbix-server.service

#查看
[root@zabbix-server ~]#ps aux|grep zabbix|grep java
zabbix      1953  0.0  0.1 140844  7492 ?        S    00:59   0:00 /usr/sbin/zabbix_server: java poller #1 [got 0 values in 0.000033 sec, idle 5 sec]
zabbix      1954  0.0  0.1 140844  7492 ?        S    00:59   0:00 /usr/sbin/zabbix_server: java poller #2 [got 0 values in 0.000064 sec, idle 5 sec]
使用系统内置模板监控 tomcat 主机
#在web端配置下主机,创建主机,模板选Generic Java JMX
接口选JMX    10.0.0.152 (java被监控真实地址)    port:12345
点击添加

#自此zabbix可以监控tomcat信息了

 

监控网络设备 SNMP

   

Zabbix 分布式实现 Proxy

实验效果,服务器显示数据比较慢属于正常现象(可能等40分钟)
#场景:
1.公司有分公司在不同地区,北京,上海
2.公司服务在不同云上,或者还有公司自己的网络
3.超大规模,上万台机器。一个zabbix服务扛不住并发,采用多个代理分摊压力

 

标签:JAVA,被动模式,点击,agent,server,zabbix,监控,echo,root
From: https://www.cnblogs.com/ludingchao/p/18402214

相关文章

  • Java 21的Preferences API的笔记
    JavaCoreLibrariesPreferencesAPI多用户环境下,应用程序保存配置参数的一种API,目前支持用户和系统两类配置。在现有的项目中,目前没有使用过本API。ComparingthePreferencesAPItoOtherMechanisms通常,应用的开发者还可以使用PropertiesAPI或者JNDIAPI。UsageNotes......
  • java 一个对象list 通过获取最大版本的 name值,版本为字符串格式 1 1.1 2 2.1 3
    你可以使用Java的流(Streams)功能来获取具有最大版本的name值。假设你的对象类名为Item,并且包含name和version字段,可以按照以下方式操作:importjava.util.*;importjava.util.stream.*;classItem{Stringname;Stringversion;//Constructor,getters,......
  • Java中Runtime类的学习
    Runtime类目录Runtime类什么是RuntimeRuntime类有哪些方法,有什么用什么是RuntimeRuntime(运行时),每个Java程序在运行时都相当于启动了一个JVM实例,每个JVM实例都对应一个Runtime对象。Runtime对象是由JVM负责实例化的,因此我们无法通过传统的方式实例化一个Runtime对象,只能通过调......
  • 彻底理解JavaScript中的闭包
    闭包是js的一个难点也是它的一个特色,是我们必须掌握的js高级特性,那么什么是闭包呢?它又有什么用呢?我们都知道,js的作用域分两种,全局和局部,基于我们所熟悉的作用域链相关知识,我们知道在js作用域环境中访问变量的权利是由内向外的,内部作用域可以获得当前作用域下的变量并且可以获......
  • Java基础13
    内部类将一个类A定义在另一个类B里面,里面的那个类A就称为内部类,类B则称为外部类。 内部类的声明理由:当一个事物A的内部,有一部分需要一个完整的结构B进行描述,而这个内部结构B只为外部事物A提供服务,并不会在其他地方用到,那么整个内部的完整结构B最好使用内部类。遵循高内聚......
  • Java多线程中常见死锁问题及解决方案
    在编写Java多线程代码的时候,很难避免会出现线程安全问题,在线程安全问题中也有一个很常见的现象就是死锁现象。今天我们就来聊一聊Java中的死锁问题,以及如何避免死锁问题。本次知识点讲解建立在大家已经知道“锁”......
  • Java反序列化漏洞-TemplatesImpl利用链分析
    目录一、前言二、正文1.寻找利用链2.构造POC2.1生成字节码2.2加载字节码1)getTransletInstance2)defineTransletClasses2.3创建实例3.完整POC三、参考文章一、前言java.lang.ClassLoader#defineClassdefineClass可以加载字节码,但由于defineClass的作用域是protected,所以攻......
  • 基于Node.js+vue基于JavaWeb的在线英语学习管理系统(开题+程序+论文) 计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着全球化进程的加速和互联网技术的飞速发展,英语作为国际通用语言的重要性日益凸显。然而,传统英语学习方式受限于时间、地点及教学资源等因素,难以满足广大......
  • 【Java】爬取澳门区划信息
    官网地址:https://macaostreets.iam.gov.mo/zh_mo/freguesiaindex.html大区部分是在页面展示的 点击发现并没有请求网络,所以数据是js中存在的 找到了展示街道方法,这一段:使用大区id匹配上述变量的functionshowStreets(freguesia){varfreguesiaStre......
  • java+vue计算机毕设电影公司网【源码+开题+论文+程序】
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景在数字化时代,电影产业作为文化创意产业的重要组成部分,正经历着前所未有的变革与挑战。随着互联网技术的飞速发展,传统电影公司的运营模式亟需转型升级,......