zabbix 创建自定义监控项

1、打开zabbix_agentd.conf中自定义监控项

[root@abcopenstack script]# tailf -10 /usr/local/etc/zabbix_agentd.conf
UnsafeUserParameters=1
Include=/usr/local/etc/zabbix_agentd.userparams.conf #链接自定义监控项的路径

2、创建自定义监控项文件(监控项的名称要有zabbix web界面一致)

未分类

[root@abcopenstack script]# vim /usr/local/etc/zabbix_agentd.userparams.conf
UserParameter=check_link,/bin/bash /usr/local/etc/script/check_link.sh

3、所定义的脚本需要定义为可执行权限

[root@abcopenstack script]# chmod 755 check_link.sh
[root@abcopenstack script]# ll
total 4
-rwxr-xr-x 1 root root 95 Oct 13 14:33 check_link.sh

4、重启zabbix_agentd

5、使用zabbix_get测试自定义的监控项是否能获取数据

[root@abcopenstack script]# zabbix_get -s 127.0.0.1 -p 10050 -k check_link

6、zabbix web 界面添加监控项

6.1 点击监控项

未分类

6.2 创建监控项

未分类

7、定义监控项图像

未分类

8、查看图像

未分类

Zabbix图形中文字体显示方块处理

原因很简单,图形显示用的字体是dejavu,不支持中文。

怎么办?先理清逻辑。

zabbix配置文件(/usr/share/zabbix/include/defines.inc.php)里,定义的字体叫做graphfont.ttf,然后一路软链接到DejaVuSans.ttf,如下:

/usr/share/zabbix/graphfont.ttf -> /etc/alternatives/zabbix-web-font -> /usr/share/fonts/dejavu/DejaVuSans.ttf

那么,修改掉最后一层软连接的目标字体就可以了。执行类似下面的命令就可以了。

yum install google-noto-sans-simplified-chinese-fonts.noarch -y
mv /etc/alternatives/zabbix-web-font /etc/alternatives/zabbix-web-font_bak 
ln -s /usr/share/fonts/google-noto/NotoSansSC-Regular.otf /etc/alternatives/zabbix-web-font

我的环境是Zabbix 3.4和CentOS7,其他版本的,就按照这个思路,修改字体包或者路径即可。

zabbix自动截图留档_python版

一、背景

每个DB Server都有zabbix监控,除了异常情况的报警信息外,也会在日检、周检、月检等工作中用到zabbix的监控数据,对zabbix监控数据会做两种处理:1 数据分析(环比分析、最大值、最小值及平均值分析);2 主要检测项目折线图留档(为啥需要留档呢,因为zabbix监控过多服务器,监控数据仅保留半年到1年间)。

关于 数据分析类的,已嵌入 日检邮件报告跟 月度报告 中,而 zabbix 监控图留档 一直没实现自动化,每个月都是人工取截图。刚好最近遇到 国庆db报告跟9月数据库报告,需要各种截图留档,然后触发了写个小脚本来自动下载 zabbix的监控图。

二、写个小脚本

2.1 获取图片url

首先打开日常的zabbix监控图页面,点击 F12,然后点击,这个时候选中页面中的折线图,就可以看到 对应的HTML代码,最后点击对应的html代码右键 copy下图片的链接地址,即可知道 zabbix的监控图 的url。

未分类

根据获取的url如下:

http://company.moniter.com/chart.php?period=2592000&stime=20170901000000&itemids%5B0%5D=32571&type=0&updateProfile=1&profileIdx=web.item.graph&profileIdx2=32571&width=1778&sid=341eb79599119b85&screenid=&curtime=1508809467171

这里边有几个参数说明下

  • stime 是监控的开始时间按照 ‘%Y%m%d%H%M%S’ 的时间格式

  • period 是监控图的时长,从 stime开始要展示 多少秒 的监控数据

  • itemid[0] 是 监控项目在zabbix 数据库的 itemid 号

    • 这个如何查呢?首先根据 host表格,找到监控服务器的hostid,然后根据 items表格找到对应的监控id

    • select i.hostid,itemid,i.name,key_,i.description from items i join hosts h on i.hostid=h.hostid where h.name = ‘hostname’;

  • curtime这里可以不填写,但是注意 stime 加上 period秒数后,不要超过当前查询时间即可

  • width 为图片的长度

根据需要,仅保留4个参数,这里注意 stime 加上 period秒数后,不要超过当前查询时间 ,简化后的url如下(把zabbix部署的域名或者网址IP替换掉 company.moniter.com):

http://company.moniter.com/chart.php?period=2592000&stime=20170901000000&itemids[0]=32571&width=1778

2.2 脚步及测试

小脚本实现的功能是:根据批量的itemid,自动下载图片到本地目录,并且重命名图片名称。

代码实现如下:

# -*- coding: utf-8 -*-
__author__ = 'xinysu'
__date__ = '2017/10/12 14:38'
import sys
import datetime
import http.cookiejar, urllib.request, urllib
from lxml import etree
import requests
class ZabbixChart(object):
    def __init__(self, name, password):
        url="http://company.monitor.com/index.php";
        self.url = url
        self.name = name
        self.password = password
        cookiejar = http.cookiejar.CookieJar()
        urlOpener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cookiejar))
        values = {"name": self.name, 'password': self.password, 'autologin': 1, "enter": 'Sign in'}
        data = urllib.parse.urlencode(values).encode(encoding='UTF8')
        request = urllib.request.Request(url, data)
        try:
            urlOpener.open(request, timeout=10)
            self.urlOpener = urlOpener
        except urllib.request.HTTPError as e:
            print(e)
    def download_chart(self, image_dir,itemids,stime,etime):
        # 此url是获取图片是的,请注意饼图的URL 和此URL不一样,请仔细观察!
        url="http://company.monitor.com/chart.php";
        # 折线图的大小
        url_par={}
        url_par={"width":1778, "height":300,"itemids":itemids}
        # 开始日期、结束日期从str转换为datetime
        stime = datetime.datetime.strptime(stime, "%Y-%m-%d")
        etime=datetime.datetime.strptime(etime, "%Y-%m-%d")
        # 计算period
        diff_sec = etime - stime
        period = diff_sec.days*24*3600 + diff_sec.seconds
        url_par["period"] = period
        # stime转换str
        stime = stime.strftime('%Y%m%d%H%M%S')
        url_par["stime"] = stime
        key = url_par.keys()
        data = urllib.parse.urlencode(url_par).encode(encoding='UTF8')
        request = urllib.request.Request(url, data)
        url = self.urlOpener.open(request)
        image = url.read()
        html = requests.get('http://company.monitor.com/history.php?action=showgraph&itemids[]={}'.format(itemids)).text
        page = etree.HTML(html)
        hostname_itemname = page.xpath('//div[@class="header-title"]/h1/text()')[0].split(':')
        hostname = hostname_itemname[0]
        hostname_itemname.pop(0)
        itemname = '_'.join(hostname_itemname).replace('/','_')
        imagename = "{}{}_{}_{}_({}).png".format(image_dir,hostname,stime,etime.strftime('%Y%m%d%H%M%S'),itemname)
        f = open(imagename, 'wb')
        f.write(image)

根据写好的类,输入zabbix的登录帐号、监控图的起始跟结束时间、本地存放图片目录、itemid的list,运行后如下:

# 登陆URL
username = "xinysu"
password = "passwd"

# 图片的参数,该字典至少传入graphid
stime = "2017-09-01"
etime = "2017-10-01"

# 用于图片存放的目录
image_dir = "E:\03 WORK\03 work_sql\201709"

#运行
b = ZabbixChart(username, password)
item_list =(35295,35328,38080,37992,38102,38014,35059,35022,42765,35024,35028,35035,35036,35044,35045,35046,35047,38248,36369,36370,36371,36372)
for i in item_list:
    itemids = i
    b.download_chart(image_dir,itemids,stime,etime)

随便输入的itemid 测试下载,实际需要根据监控需要过滤itemid,下载后在文件夹中显示如下:

未分类

未分类

Zabbix 3.2.6 自定义端口监控(Oracle)

一、背景

在现实的环境中,我们多多少少有些服务需要监控,但是zabbix自带的监控模板不存在,就需要我们自己进行配置,我们的主要方法也是监控这些服务的端口状态来确定服务是否正常运行。

我们今天主要通过判断Oracle的端口状态来监控服务是否正常,它的端口是1521。

二、配置

1、模板创建

为了简化操作,我们这里直接创建模板,不必每台机器单独去创建item以及trigger。

未分类

2、创建item

未分类

3、创建trigger

未分类

4、图标制作

有兴趣的可以制作一下图表,因为我没有兴趣,我这里就不写了。

5、给主机添加模板

这一步我也不再展示了,添加模板大家都会了。

三、验证

因为我的Action是默认的,只要出问题就会报警,这里不再展示,可以查看我其他的博文,我们停掉或者恢复数据库的监听端口,查看报警信息。

我这里是微信报警,关于微信报警的设置可以去查看我相关的博文。

未分类

Zabbix(5)通过JMX监控Tomcat

Zabbix监控tomcat主要使用的是zabbix的zabbix-java-gateway。从Zabbix 2.0开始,内置了监控JMX的功能,叫做“Zabbix Java Gateway”,在Zabbix Server和Zabbix Proxy上启动名为“Zabbix Java Gateway”的进程,当需要获取JMX数据时,Zabbix Server会“问”JMX Gateway,然后JMX Gateway根据JMX管理API去查询需要的数据。在使用时,Java程序不需要在代码中新增任何东西,只需要在启动的时候加上一些JVM参数,使得它可以支持使用端口监控JMX。JMX的全称是Java Management Extensions,即Java管理扩展。Java程序会开放一些端口,用来获取运行状况。

一、安装jmx服务器

1、安装jdk

下载JDK: http://www.oracle.com/technetwork/java/archive-139210.html

配置环境变量: http://islocal.cc/2017/09/27/JDK%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F%E9%85%8D%E7%BD%AE/

2、安装jmx服务

yum -y install zabbix-java-gateway

3、配置jmx服务

egrep -v '#|^$' /etc/zabbix/zabbix_java_gateway.conf
LISTEN_IP="0.0.0.0"
LISTEN_PORT=10052
PID_FILE="/var/run/zabbix/zabbix_java.pid"
START_POLLERS=5
TIMEOUT=3
systemctl start zabbix-java-gateway
systemctl enable zabbix-java-gateway

4、修改zabbix server配置

添加以下三行,这里配置的StartJavaPollers值要小于之前java_gateway中的START_POLLERS

tail -n 3 /etc/zabbix/zabbix_server.conf 
JavaGateway=127.0.0.1
JavaGatewayPort=10052     
StartJavaPollers=3

修改zabbix_server.conf后重启服务

systemctl restart zabbix-server

二、Tomcat配置修改

1、修改配置文件

Windows下tomcat在F:deployapache-tomcat-8.5.20-OUbincatalina.bat中set “CURRENT_DIR=%cd%”下添加以下内容

set CATALINA_OPTS=-Dcom.sun.management.jmxremote.port=12345 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false

2、测试JMX

下载以下两个jar包放在tomcat lib目录下。

下载cmdline-jmxclient-0.10.3.jar

http://crawler.archive.org/cmdline-jmxclient/cmdline-jmxclient-0.10.3.jar

下载catalina-jmx-remote.jar

https://archive.apache.org/dist/tomcat/tomcat-7/v7.0.77/bin/extras/catalina-jmx-remote.jar

F:apache-tomcat-7.0.70(zabbix)lib>java -jar cmdline-jmxclient-0.10.3.jar - 192.168.6.124:12345 java.lang:type=Memory NonHeapMemoryUsage
10/10/2017 16:31:57 +0800 org.archive.jmx.Client NonHeapMemoryUsage:
committed: 24838144
init: 12746752
max: 100663296
used: 24806392

三、在zabbix web页面中添加JMX端口

1、导入模板

zabbix自带的”Template App Generic Java JMX”和”Template App Apache Tomcat JMX”模板很多都获取不到数据,从网上找了个模板,监控项不多,但是都是很实用的。

未分类

未分类

2、添加JMX端口

jmx的端口一定要与在catalina.bat下配置的jmxremote.port一样

未分类

3、关联模板

未分类

4、查看图形

未分类

Zabbix(6)监控SQL Server数据库

监控SQL Server相对来说比较简单,首先我们下载一个MS SQL的模板文件

下载地址:https://share.zabbix.com/databases/microsoft-sql-server/template-ms-sql-2012

修改zabbix_agent.conf文件

添加下边这行到配置文件最后

UserParameter=sqldatabasename.discovery,powershell -NoProfile -ExecutionPolicy Bypass -File C:zabbixscriptsSQLBaseName_To_Zabbix.ps1

将powershell脚本放在目录下

将SQLBaseName_To_Zabbix.ps1脚本放在C:zabbixscripts目录下

重启zabbix agent

重启客户端zabbix agent服务

导入模板文件

导入模板MS SQL 2012.xml

关联模板

未分类

查看最新数据

未分类

wordpress全站https

博客使用的是wordpress,最近在支持https,配置好证书,后台设置好地址,七牛云的插件也配置好了,却发现文章中的图片都不能看到了,原来之前文章中插入的地址都是http的地址,直接插入数据库了,其中一种方法就是将数据库中的内容遍历出来改了,但是这样可能会伤害到文章数据,所以还是直接全站改掉http链接的好,方法就是在function.php文件中添加下面一段代码就可以实现了~

function replacehttp($content){
if( is_ssl() ){
$content = str_replace('http://blog.duicode.com/wp-content', 'https://blog.duicode.com/wp-content', $content);
}
return $content;
}
add_filter('the_content', 'replacehttp');

NFS实现共享wordpress

实验环境

192.168.68.134 wordpress站点 nfs-server

192.168.68.144 nfs-client

实验要求

nfs server共享/var/www/html目录

nfs clinet挂载nfs-server共享的目录,部署wordpress

nfs server端

先部署wordpress document root 在 /var/ww/html下

vim /etc/exports :/var/www/html/ 192.168.0.0/16(rw)

exportfs -r

systemctl start nfs

nfs client端

[root@centos ~]# showmount -e 192.168.68.134

[root@centos ~]# mount -t nfs 192.168.68.134:/var/www/html /var/www/html

[root@centos ~]# systemctl restart httpd

【渗透神器系列】WireShark

wireshark是一款网络流量抓取分析神器,也是安全工具使用排行中排名第一的工具。使用wireshark必须要牢记一些常用的数据包过滤规则,对于寻找一些特定的包会事半功倍。

IP过滤

ip源地址:  ip.src    ip.src==10.0.3.109

ip目的地址:   ip.dst    ip.dst==10.0.3.114

端口过滤

tcp.port==80    所有端口为80的包

tcp.dstport==80   目的端口为80的包

tcp.srcport==80   源端口为80的包

协议过滤

http

tcp

icmp

…….

http模式过滤

http.request.method==”GET”  查找GET包

http.request.method==”POST”  查找POST包

连接符

and  &

or  ||

自助模式

可以打开wireshark的Expression会弹出Filter Expression窗口:

未分类

wireshark过滤

wireshark是一个网络封包分析软件。网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料。Wireshark使用WinPCAP作为接口,直接与网卡进行数据报文交换。它不会对网络封包产生内容的修改,只反映出目前流通的封包资讯,其本身也不会送出封包至网络上。wireshark是捕获机器上的某一块网卡的网络包,当你的机器上有多块网卡的时候,你需要选择一个网卡。

一些基本的设
置在 编辑—->首选项里可以找到,版本不同界面上有所差异。
学习使用wireshark可以参考:https://community.emc.com/thread/194901?start=0&tstart=0

以及书籍《wireshark网路分析实战》【以色列】Yoram Orzach著 人民邮电出版社(这本书的内容比较全面,也比较贴近实际用法的场景介绍)

1、wireshark过滤规则

过滤对分析包含大量文件信息的报文集合有很大的功能,系统还具有自动完成功能。其自带的捕获过滤功能:在Capture -> Capture Filters中设置;与显示过滤功能:过滤IP,MAC,端口,协议;根据报文长度,http、dns等模式,TCP参数,包内容过滤。过滤的方式可以保留成一个快捷键。而过滤使用的语句可以类似与正则表达式的使用。

下面主要介绍比较常用的几个过滤功能使用方式。

TCP:只显示通过TCP(包含TCP报文段)的报文。其他协议的过滤使用类似。not TCP或者!TCP表示除了TCP协议的报文。

Tcp.port == 80 or Tcp.port== 8080对于TCP的建立连接很快捷进行分析。

ip.src ==192.168.1.102:源IP为192.168.1.102

目的IP,MAC地址等也使用类似的功能。相关的一些关于数值的使用也可以使用字符来代替。

小于等于le等于eq大于gt大于等于ge不等ne

http模式的过滤以及内容的过滤。这是最重要的一部分

http.request.method ==“GET”以GET模式提交的方式

http contains“HTTP/1.1 200 OK”HTTP服务的成功连接

正则表达式的结合使用:

tcp[20:] matches“^GET (.*?)HTTP/1.1//x0d//x0a[//x00-//xff]*Host:“

eth.addr[0:3]==e4:02:9bMAC地址前三部分等于e4:02:9b

ip[8:1]==1分析TTL值

tcp.flags.syn==1#查看TCP建立链接的SYN数据包

未分类

2、wireshark有效功能窗口

封包列表颜色区分,方便识别和查找。

未分类

捕获日志:

未分类

专家分析状态:

未分类

跟踪数据流Analyze>Follow>TCP/UDP

未分类

会话分析:statistics>conversations。用于分析会话的分布,比如大量的恶意流量来源,可以有效的获取信息,同时列表形式的情况就可能是一个扫描的工作在进行。还可以发现是否有一个内网IP曝光程度太高(即会话数量很多),是否出现广播包(广播包的数量非常多)

未分类

从报文中解析出相应的文件:

使用tcp过滤器跟踪数据流,发现有文件格式是jpg的文件。

未分类

File>export object>http得到导出的另一种格式:选择对应文件保存就可以

未分类