月度归档:2017年09月

zabbix监控日志文件 MySQL日志为例(95)

一般情况下,日志最先反映出应用当前的问题,在海量日志里面找到我们异常记录,然后记录下来,并且根据情况报警,大家可以监控系统日志、nginx、Apache、业务日志。这边我拿常见的MySQL日志做监控,大家看演示。

监控日志key

首先要了解key,

log[ file  ,<regexp>,<encoding>,<maxlines>,<mode>,<output>]

file:文件名,写绝对路径

regexp:要匹配内容的正则表达式,或者直接写你要检索的内容也可以,例如我想检索带ERROR关键词的记录

encoding:编码相关,留空即可

maxlines:一次性最多提交多少行,这个参数覆盖配置文件zabbxi_agentd.conf中的’MaxLinesPerSecond’,我们也可以留空

mode:默认是all,也可以是skip,skip会跳过老数据

output:输出给zabbix server的数据。可以是\1、\2一直\9,\1表示第一个正则表达式匹配出得内容,\2表示第二个正则表达式匹配错的内容。

备注:我极力推荐大家使用第二个参数,看到网上一些zabbix监控日志的教程,几乎只有第一个参数,这样将会导致日志文件里的内容统统丢给zabbix_server记录,我想,这一定不是大家想看到的。

日志文件权限配置

给日志文件加上读取权限,为了演示方便,我直接给777

如果权限给的不到位,zabbix agent日志有类似如下报错:

zabbix配置

Host>>目标主机>>item>>create item,如下:

logrt

zabbix日志监控

说明:

1. type必须选择zabbix agent(active),因为数据是zabbix被监控的主动提交给server

2. key:log[/data/mydata/mydata_3306/li220-237.err,ERROR,,,,],我不多说了,细心的人会说,还有一个叫logrt得key,有什么区别,等会儿讲.

3. log time format:yyMMddphh:mm:ss,对应日志的行头150311 11:47:09,y表示年、M表示月、d表示日、p和:一个占位符,h表示小时,m表示分钟,s表示秒。

zabbix监控MySQL日志查看

切换到最新日志里面,找到相应数据,如下是我的监控截图

logrt

zabbix监控MySQL日志

接下来便是触发器,大家可以根据自己的情况来创建触发器,例如日志中包含某个字符串等等,如上图,我们可以触发执行mysql表修复。

logrt介绍

如果仔细看可以发现,第一个参数不一样,logrt的第一个参数可以使用正则表达式。针对日志回滚用得,例如我们每天都切割nginx日志,日志名位www.ttlsa.com_2017-01-01.log、www.ttlsa.com_2017-01-02.log等等,使用log肯定不合适,如果文件名使用正则,那么新增的日志文件会立即加入监控。

备注:不管新日志、老日志,只要他们有变更,zabbix都会监控。

 

 

Received empty response from Zabbix Agent问题解决(94)

刚接触zabbix新手少部分会出现如下错误:

Received empty response from Zabbix Agent at [192.168.1.2]. Assuming that agent dropped connection because of access permission

大概意思是说没有权限访问agent端口10050,解决方法如下:

如果你的server有多个IP地址,使用逗号分隔多个IP地址。

 

 

java struts2 远程执行任意java代码漏洞

最近网络上爆发大规模的struts2远程代码执行漏洞。

漏洞说明

漏洞危害

漏洞可以远程执行任意Java代码

危险等级

高危

受影响版本

Struts 2.3.20 – Struts 2.3.28 (2.3.20.2 和 2.3.24.2 除外)

CVE

CVE-2016-3081

漏洞前提

开启动态方法调用, struts.xml配置

<constant name=”struts.enable.DynamicMethodInvocation” value=”true” />

沙盒绕过

通过ognl表达式静态调用获取ognl.OgnlContext的DEFAULT_MEMBER_ACCESS属性,并将获取的结果覆盖_memberAccess属性,这样就可以绕过SecurityMemberAccess的限制。

漏洞详情

https://struts.apache.org/docs/s2-032.html

http://www.freebuf.com/vuls/102836.html

临时解决方案

1. 检查是否使用struts2

2. 检查是否开启动态方法调用

3. 在struts前端nginx配置正则拦截攻击请求

正则:if($args ~ @ognl.OgnlContext@DEFAULT_MEMBER_ACCESS) { return 404;}

升级Struts 2至Struts 2.3.20.2, Struts 2.3.24.2 或者 Struts 2.3.28.1,以便彻底解决此问题。

Nagios太阳(pnp)安装配置

Nagios太阳(pnp)安装配置

一.安装rrdtool

RRDTOOL将nagios采集的数据绘制成图表。

 

二.安装pnp

 

三.配置nagios

 

四.验证

http://ip/nagios/pnp/

zabbix加载扩展模块 第三方库支持(92)

zabbix从2.2版本开始增加了使用动态库来扩展zabbix功能。loadable modules实际上和我们前面提到的用户自定义key是一样的功能,不同的是,他用加载lib库的方式,并且zabbix不需要fork一个新的进程,性能更好。目前类似的功能包含user parameters 、 external checks 、 system.run[] ,如果这些脚本逻辑过于复杂、耗时太长会出现比较严重的问题。

工作中,我们可以使用c开发一些适用于我们自己生产环境的模块。当然你也可以将它分享给出来,而不需要公布你的源代码,如果你对自己写的代码不自信的话。当agentd、server、proxy启动的时候同时将模块加载进来,退出的时候也会释放。

zabbix模块API

zabbix代码中有提供api所需的头文件.h,目前模块有两类接口需要实现,一类是必须实现的,一类是可选的。

必须实现的接口

两个接口: zbx_module_api_version()、zbx_module_init()

用于返回API版本,必须实现,默认返回常量ZBX_MODULE_API_VERSION_ONE(数值1)

模块必要的一些初始化,初始化成功返回ZBX_MODULE_OK,否则返回ZBX_MODULE_FAIL。

可选接口

可选接口有zbx_module_item_list()、 zbx_module_item_timeout()、 zbx_module_uninit()

返回模块内定义的item列表,包含key,如:agent.ping、agent.version,每个item都使用结构体ZBX_METRIC

超时时间设置,秒为单位

释放资源,如:文件描述等

定义item结构体

key:item key名称,例如agent.ping、mysql.version等

flags:CF_HAVEPARAMS 或者0

function:将要调用的函数

test_param:参数列表

示例

在定义function需要接收两个参数AGENT_REQUEST 、AGENT_RESULT ,如下

编译模块

编译准备

zabbix提供了一份用于测试的模块源码,在zabbix源码目录下

请一定记住所有的源代码最好放到modules目录下来编译,因为他需要一些接口都在源码中。例如include/module.h、include/sysinc.h、 include/config.h,前面两个.h文件解压就存在,而config.h需要在源码根目录下执行./configure(不能带参数,否则会报错)。

开始编译

加载模块

拷贝so文件到zabbix目录下

修改配置文件

测试模块

重启zabbix_agentd

# killall zabbix_agentd

# /usr/local/zabbix-2.4.3/sbin/zabbix_agentd

测试key

可以看到定义好的三个key都成功了。学好linux c开发自己的zabbix模块吧。

 

 

 

zabbix监控惠普打印机(91)

假设公司有多个楼层或者分布在不同楼,打印机自然分布很广泛,打印机缺少油墨或者卡纸了,都需要员工找IT部门。我们使用zabbix对打印机进行监控,一旦缺少油墨,zabbix发出报警,it人员能够及时更换,让打印机一直处在不间断的工作状态。如果卡纸也能第一时间赶赴现场,迅速解决问题。

我们今天监控的主要项目是油墨,卡纸这块请根据对应的snmp来做

开启打印机SNMP

登陆打印机web地址:http://192.168.1.20/(我当前的),网络>>SNMP>>勾选”启用 SNMP v1/v2 只读访问(将 ‘public’ 用于获取社区名称)”

hp

 

油墨剩余量OID

可以看出,我们当前油墨剩余量是30%,与web管理后台的剩余量一致

hp

创建主机

configuration>>HOST>>create host,type选择SNMPv2 agent,key其实意义不大,OID:.1.3.6.1.2.1.43.11.1.1.9.1.1,更新时间大家自己发挥,其他都用默认,想了解更多关于zabbix使用snmp监控,请回头看ttlsa相关文章。

hp

 

创建触发器

当油墨小于10%,trigger触发warnning。出现warnning之后,接下来的便是邮件报警了。

hp

当油墨不足时,trigger报警如下

hp

邮件报警

邮件报警请参考《zabbix邮件报警

 

更多相关文章

1. zabbix snmp类型 无需安装agent也能监控(51)

2. snmp安装配置 zabbix snmp监控准备(52)

3. snmp v3的安全配置 snmp认证与加密配置(53)

4. SNMP OID列表 监控需要用到的OID

5. zabbix单位符号Unit symbols(32)

打印机OID:http://www.oidview.com/mibs/0/Printer-MIB.html

OpenTSDB Nagios 实现监控报警

OpenTSDB 非常强大,但是没有一个完整的监控平台。现在,OpenTSDB上有一系列的metric,当这些值超过临界值时,发送报警。在OpenTSDB源码tools目录下有一个Python工具check_tsd。该脚本查询OpenTSDB并返回兼容Nagios的输出OK/WARNING/CRITICAL状态格式。

check_tsd 解释

参数说明

添加Nagios命令

将check_tsd脚本放在Nagios服务器/usr/local/nagios/libexec目录里。

编辑/usr/local/nagios/etc/objects/commands.cnf文件,添加下面的命令:

添加监控项

nagios

OpenTSDB 部署

有关 OpenTSDB 介绍可以参见之前的文章。

OpenTSDB架构

OpenTSDB三大块,收集,加载/存储和查询数据。这种架构的主要目的是写入和读取数据点到HBase的。 有很多种方法来收集数据。我们可以使用tcollector,也可以自定义客户端程序收集。架构图如下:

HBase

所需条件

  • A Linux system
  • Java Development Kit 1.6 or later
  • GnuPlot 4.2 or later
  • Autotools
  • Make
  • Python
  • Git
  • An Internet connection

安装jdk

为了处理大量的数据使用的HBase作为底层数据库。在安装OpenTSDB前,需要先安装并运行HBase。本文将部署简单单一的HBase环境,如果你需要可扩展高可用性,就需要部署完全的HBase集群。

Oracle下载jdk安装包。

设置环境变量

部署单一的HBase实例

配置HBase

启动HBase实例

安装Gnuplot

安装OpenTSDB

下载地址:https://github.com/OpenTSDB/opentsdb/releases

可以下载RPM包安装或通过源码安装。通过源码编译安装需要连接到Google code下载jar包。

创建表

COMPRESSION可以有NONE/LZO/GZIP/SNAPPY。 推荐使用LZO,压缩率高,会节省空间。 将创建4张表:tsdb、tsdb-uid、tsdb-tree、tsdb-meta。

配置OpenTSDB

要能正常启动tsdb服务,需要配置以下四个参数:

  • Port: 监听的端口,默认 4242
  • Staticroot: 指定web静态文件根目录
  • Cachedir: 创建一个临时目录来存储缓
  • Zkquorum: 指定Zookeeper服务器ip和端口

Cachedir目录会缓存大量的临时过期文件,需要定期清理。源码目录下有提供一个脚本来定期清理该目录。可以设置为cron任务。

启动tsdb服务:

采集数据

收集的数据格式如下:

put tsd.hbase.latency_90pct 1408958117 18 method=scan host=tsdb class=TsdbQuery
put tsd.hbase.latency_95pct 1408958117 18 method=scan host=tsdb class=TsdbQuery
put tsd.hbase.root_lookups 1408958117 0 host=tsdb
put tsd.hbase.meta_lookups 1408958117 2 type=uncontended host=tsdb
put tsd.hbase.meta_lookups 1408958117 0 type=contended host=tsdb
put tsd.hbase.rpcs 1408958117 0 type=increment host=tsdb
put tsd.hbase.rpcs 1408958117 312 type=delete host=tsdb
put tsd.hbase.rpcs 1408958117 601 type=get host=tsdb
put tsd.hbase.rpcs 1408958117 14543 type=put host=tsdb
put tsd.hbase.rpcs 1408958117 0 type=rowLock host=tsdb
put tsd.hbase.rpcs 1408958117 102 type=openScanner host=tsdb
put tsd.hbase.rpcs 1408958117 102 type=scan host=tsdb
put tsd.hbase.rpcs.batched 1408958117 739 host=tsdb
put tsd.hbase.flushes 1408958117 0 host=tsdb
put tsd.hbase.connections.created 1408958117 1 host=tsdb
put tsd.hbase.nsre 1408958117 0 host=tsdb
put tsd.hbase.nsre.rpcs_delayed 1408958117 0 host=tsdb
put tsd.compaction.count 1408958117 379 type=trivial host=tsdb
put tsd.compaction.count 1408958117 32 type=complex host=tsdb

这个这是简单的测试。收集OpenTSDB的信息的。 可以使用Tcollector来收集数据。有关Tcollector内容参见之前的文章。

OpenTSDB内置的可视化界面

通过http://IP:4242来访问

 

HBase

zabbix开启报警声音 网页也可以有声音(49)

用过nagios的兄弟应该用过 Nagios Checker,当nagios有异常监控,他可以发出报警声音,不过他是浏览器的一个扩展。而zabbix直接自带了这个功能。

zabbix右上角的profile(配置)–>messaging–>Frontend messaging勾上。可以选择你需要发出声音的故障的严重性类型。下回有报警便能发出声音了。上图吧,一看就知道~

Linux

zabbix报警声音

 

参考

Nagios Checker:https://addons.mozilla.org/zh-CN/firefox/addon/nagios-checker/

zabbix telnet监控类型(93)

概述

zabbix监控的方式很多,例如前面讲到的agent、snmp以及后续后续要讲到ssh和今天要讲到的telnet。流程很简单,创建item–>配置ip、用户、密码、端口、脚本->zabbix server telnet目标ip->执行制定脚本,脚本最后返回数据给server。

目标:获取linux系统15分钟负载

telnet key

语法:telnet.run[<unique short description>,<ip>,<port>,<encoding>]
<unique short description>:描述
<ip>:服务器ip
<port>:服务器端口
<encoding>:编码,可为空

telnet配置

请看《linux下telnet安装与使用》

创建脚本

获取系统负载脚本loadavg.sh

创建item

configuration>>host>>你的主机>>item>>create item,如下:

Linux

属性说明:

user name:telnet账号

Password:telnet密码

 

 

获取到的结果如下

Linux

优缺点都很明显,只需要通过telnet就可以监控服务器,但是账号密码是明文配置在item中的,而且一旦网络不好,item状态很容变为unspport。一直相类似的还有ssh监控类型,想了解的同学情关注下一篇文章。再会~