阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

通过Zabbix监控60台阿里云的RDS和redis数据库

254次阅读
没有评论

共计 5193 个字符,预计需要花费 13 分钟才能阅读完成。

前言:

最近一直在做监控方面的东东,一些基本的东西基本到处都有资料也就不多说了。但是,让监控阿里云的数据库真是把我难住了。研究了许久的阿里云 api,虽然代码写出来了,但是遇到一个坑,所以转换了思路,分别用 redis 和 MySQLadmin 连接数据库,获取连接数和请求数,但是却获取不到实例的 CPU 使用率。又只好回头研究阿里云的 api。花了几天终于踩完所有坑,达到自己想要的效果,具体实现过程如下:

正文:

主要添加了以下三条自定义 key,第一条通过 redis_cli 客户端连接 redis 获取统计数据,第二条通过 mysqladmin 连接 mysql 获取统计数据,第三条就是坑我好几天的,通过云监控获取实例信息的 key。阿里云的 RDS 默认是 5 分钟获取一条监控数据,部分重要的数据库可以设置为 1 分钟获取一次。不过这个是要收费的。最开始以为都是 60 秒获取一次监控数据,所以从云监控获取数据时,时间间隔是 60 秒,就莫名奇妙的出现,有的服务器能获取数据,有的服务器不能获取数据。所以最后的解决思路是,把时间间隔调大,获取好几条数据,然后取最后一条数据就可以了。

#zabbix_agentd.conf
UserParameter=redis.get[*],/usr/local/sbin/redis_get.sh $1 | grep -Po ‘$2:\K[.\d]+’
UserParameter=rds.get[*],mysqladmin -h $1 -P 3306 -u db_username  extended-status -p’password’ | grep -Po ‘$2[^\d]+\K\d+’
UserParameter=rds.get_from_cms[*],/usr/local/sbin/database_api.py $1 $2 $3 | grep -Po ‘Average”:\K[.\d]+’ |tail -1

为了自已想象中的安全,我把 redis 服务器的密码单独放在某个文件中,然后通过自己写的脚本读取 redis 的连接地址,连接密码,和实例名称,这样在增加 item 的时候只用添加一个实例名称就好,下面脚本会自己通过实例名称获取 redis 地址和密码。

#!/bin/bash
#/usr/local/sbin/redis_get.sh
shadow=/usr/local/sbin/redis_shadow
address=`awk -vn=$1 ‘n ~ $NF{print $1}’ $shadow`
password=`awk -vn=$1 ‘n ~ $NF{print $2}’ $shadow`
redis-cli -h $address -a $password info

保存 redis 的信息放在一个单独的文件中,有新增的 redis 实例就直接修改这个配置文件就可。

#/usr/local/sbin/redis_shadow
redis 连接地址 连接密码 实例名称

上面的比较简单。但是有个问题。总共 60 台服务器,每个服务器有 3 条需要监控的点,所以就得创建 180 个 item,因为 redis 和 rds 里面不能放 zabbix 客户端,所以我就直接通过监控服务器获取 60 台数据库的监控信息。我真的手动添加了 180 个 item。。。。真是傻的可爱~ 所以后面监控 cpu 使用率我就用 zabbix 的 api 来批量添加 item,顿时爽炸了~ 不过在此之前,先看看如何通过阿里云的 api 获取数据库的 cpu 使用率把。

#!/usr/local/bin/Python
from aliyunsdkcore import client
from aliyunsdkcms.request.v20160318 import QueryMetricListRequest
    #用的云监控的 api
import time
import sys
import json
if len(sys.argv) != 4:
        print ‘\tusage: python database_api.py <your_PrijectName> <your_Metric> <your_instanceId> ‘
        print ‘\thelp from help.aliyun.com/document_detail/28619.html\n’
        exit()
clt = client.AcsClient(‘your_access_key’,’your_key_password’,’region_id’)
    #得先创建 access_key 哟,region_id 可以看 region_id 的列表,比如华北 1 是什么 id 呀之类的。
request = QueryMetricListRequest.QueryMetricListRequest()
request.set_accept_format(‘json’)
request.set_Project(sys.argv[1])
    #此处设置 Project 用来定义你是 redis 还是 ecs 还是 rds,具体看查看文档:https://help.aliyun.com/document_detail/28619.html?spm=5176.doc28615.6.627.vlxOtm
request.set_Metric(sys.argv[2])
    #此处就是你要获取值的监控项,也可以查看上面的文档
start_time = time.strftime(‘%Y-%m-%d %H:%M:%S’,time.localtime(time.time()-350))
    #设置一个时间为当前时间的前 350 秒处
timestamp_start = int(time.mktime(time.strptime(start_time, “%Y-%m-%d %H:%M:%S”))) * 1000
request.set_StartTime(timestamp_start)
request.set_Dimensions(“{‘instanceId’:’%s’}”%sys.argv[3])
    #此处要设置实例 id。
request.set_Period(’60’)
result = clt.do_action(request)
print result
    #最后得到的是一个 json 格式的字符串,然后在自定义的 key 中通过 grep 获取到对应的值
#result2 = json.loads(result)
#print float(result2[‘Datapoints’][-1][‘Average’])

———————————————————————————————–

/usr/local/sbin/database_api.py $1 $2 $3 | grep -Po ‘Average”:\K[.\d]+’ |tail -1
单独把自定义 key 的后半部分解释一下。在创建 item 时,database_api.py 会通过 key 获取到三个值
分别是 Project,Metric 和实例 id。然后通过 grep 提取 json 字符串中 Average 对应的值,因为有可能获取
很多值,所以用 tail 获取最后一个值。

注:主要的坑就是上面的哪个 start_time,如果获取不到值就再设置大点就好。下面就是批量增加 item 的代码。大致参考的是别人的。其中需要注意 的一点就是我是手动获取 applicationid 的,可以连接上 zabbix 后通过 zapi.application.get({“filter”:{‘name’:[“APPLICATION_NAME”]}})[0][‘applicationid’] 获取 application 的 id。其中 APPLICATION_NAME 就是你的 application 的名字咯。如果并不需要放入某个 application,可以删掉其中的 applications 那一项。

#!/usr/bin/python
#-*- coding:utf8 -*-
import sys
from zabbix_api import ZabbixAPI
server = “http://YourZabbixServerAddress”
username = “Admin”
password = “password”
zapi = ZabbixAPI(server=server, path=””, log_level=0)
zapi.login(username, password)
 
def get_hostinfo():
        #主要用来获取 host 的 id,接口的 id,其中 HOST_NAME 就是你想往哪个 host 里面增添 item。
    host_info=zapi.host.get({“selectInterfaces”:[“interfaceid”],”filter”:{“host”:[“HOST_NAME”]}})
    hostid = host_info[0][‘hostid’]
    interfaceid =  host_info[0][‘interfaces’][0][‘interfaceid’]
    return (hostid,interfaceid)
 
def create_item(name,key):
    a = get_hostinfo()
    hostid = a[0]
    interfaceid = a[1]
    create_item=zapi.item.create(
        {
            “name”:name,
            “key_”:key,
            “hostid”:hostid,
            “type”:0,
            “value_type”:0,#0 是 float,3 是整数
            “interfaceid”:interfaceid,
            “date_type”:0,
            “delay”:60,
            “history”:7,
            “trends”:90,
            “status”:0,
            “applications”:[#如果不放入某个 applications 可以删掉此项
                “2311”
            ]
        }
    )
    return “item create success”
if __name__ == “__main__”:
    arg1=’CpuUsage’
    with open(‘conf’) as f:
            #从 conf 文件中读取实例 id 和实例名称。
        for i in f:
            rds=i.split()
            key=”rds.get_from_cms[acs_rds,%s,%s]”%(arg1,rds[0])
            name=”%s-%s”%(rds[1],arg1)
            print key,name
            result=create_item(name,key) #调用添加函数。
            print result

 

#conf
实例 id 实例名称

一些 Zabbix 相关教程集合

Ubuntu 14.04 下 Zabbix2.4.5 源码编译安装  http://www.linuxidc.com/Linux/2015-05/117657.htm

CentOS 7 LNMP 环境搭建 Zabbix3.0  http://www.linuxidc.com/Linux/2017-02/140134.htm

Ubuntu 16.04 安装部署监控系统 Zabbix2.4  http://www.linuxidc.com/Linux/2017-03/141436.htm

Zabbix 监控安装部署及警报配置  http://www.linuxidc.com/Linux/2017-03/141611.htm

Ubuntu 16.04 下安装部署 Zabbix3.0  http://www.linuxidc.com/Linux/2017-02/140395.htm

CentOS 6.3 下 Zabbix 监控 apache server-status http://www.linuxidc.com/Linux/2013-05/84740.htm

CentOS 7 下 Zabbix 3.0 安装详解 http://www.linuxidc.com/Linux/2017-03/141716.htm

64 位 CentOS 6.2 下安装 Zabbix 2.0.6   http://www.linuxidc.com/Linux/2014-11/109541.htm

ZABBIX 的详细介绍:请点这里
ZABBIX 的下载地址:请点这里

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-03/141919.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计5193字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中