背景
基础搭建篇我们讲了如何配置可移植的Prometheus+grafana,客户端使用的是node_exporter,采用server端pull的方式采集数据,本次我们来试一下client端push的方式,就是Prometheus的另一个工具:pushgateway。
pushgateway的优缺点这里就不多讲了,网上总结的比我好,我们主要是学习一下基本用法。
pushgateway拓扑图
pushgateway像一个被动的小伙纸,数据源是各个client推给他,他把信息记录下来,然后Prometheus再去他那儿拉去数据。
Prometheus每次从pushgateway拉取的数据并不是期间用户推送上来的所有数据,而是client端最后一次push上来的数据。因此需设置client端向pushgateway端push数据的时间小于等于prometheus去pull数据的时间,这样一来可以保证prometheus的数据是最新的。
安装配置
获取安装包
官方下载地址:https://prometheus.io/download/ 按照自己的系统选择合适的包,博主是CentOS7,选择如图所示
配置
1.将包解压并规范目录
按照规范,我们将下载好的包解压、改名并移动到指定目录下
tar -zxvf pushgateway-1.3.1.linux-amd64.tar.gz
mv pushgateway-1.3.1.linux-amd64 /opt/prome/pUshgateway
2.控制脚本
跟以前一样,我们用脚本控制服务的启停并监控服务的运行,脚本如下
[root@localhost pUshgateway]$ vim watchdog
#!/bin/bash
APP=pushgateway
CURR_DIR=$(cd `dirname $0`; pwd)
PROGRAM=$CURR_DIR/watchdog
CRONTAB_CMD="* * * * * $PROGRAM start"
flag=$1
cd $CURR_DIR
#创建定时任务
count=`crontab -l | grep $PROGRAM | grep -v "grep" | wc -l`
if [ $count -lt 1 ]; then
(crontab -l 2>/dev/null | grep -Fv $PROGRAM; echo "$CRONTAB_CMD") | crontab -
count=`crontab -l | grep $PROGRAM | grep -v "grep" | wc -l`
if [ $count -lt 1 ]; then
echo "create cron faild."
exit 1
fi
fi
function pid()
{
ser=`ps -ef |grep -w $APP |grep -v grep|grep -v $flag |awk '{print $2}'`
echo $ser >"$CURR_DIR/$APP.pid"
}
function start()
{
pid
if [ "$ser" != "" ];then
echo "$APP running. pid=$ser"
else
echo "Starting $APP ..."
echo `date +"%Y-%m-%d %H:%M:%S"`,"start $APP" >> $DOG_LOG/${DATE}.log
nohup $CURR_DIR/$APP >/dev/null 2>&1 &
fi
sleep 1
chkn=`ps -ef |grep -w $APP |grep -v grep|grep -v $flag |wc -l`
if [ $chkn -eq 1 ];then
echo "$APP is started"
else
echo "$APP start failed"
exit 1
fi
}
function stop()
{
echo "Stopping $APP ..."
appid=`pgrep -f $APP`
if [ "$appid" != "" ];then
kill -TERM $appid
fi
sleep 1
chkn=`ps -ef |grep -w $APP |grep -v grep|grep -v $flag |wc -l`
if [ $chkn -eq 0 ];then
echo "$APP is stoped"
else
echo "$APP stop failed"
exit 1
fi
}
function restart() {
stop
start
}
function k()
{
kill -9 `pgrep -f $APP`
}
function status() {
pid
if [ "$ser" != "" ];then
echo $APP started pid=$ser
else
echo $APP stoped
fi
}
function usage()
{
echo "$0 start 启动服务"
echo "$0 stop 停止服务"
echo "$0 restart 重启服务"
echo "$0 status 查询服务状态"
echo "$0 k 强制杀死服务进程"
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
status)
status
;;
k)
k
;;
*)
usage
esac
3.修改Prometheus配置文件
因为prometheus配置pushgateway
的时候,也会指定job和instance,但是它只表示pushgateway实例,不能真正表达收集数据的含义。所以配置pushgateway需要添加honor_labels:true,避免收集数据本身的job和instance被覆盖。
vim prometheus.yml
在scrape_configs:
下添加如下内容:
- job_name: 'push-metrics'
static_configs:
- targets: ['localhost:9091']
honor_labels: true
修改完成后重启Prometheus
4.启动服务并验证
进入pushgateway目录下,执行启动命令
cd /opt/prome/pUshgateway
./watchdog start
看一下进程
[root@localhost pUshgateway]$ ./watchdog status
pushgateway started pid=19583
打开Prometheus的web页面,看一下啊targets下面是否有我们刚刚添加的push-metrics
如下所示,我们添加的push-metrics
已经up状态了
脚本推送
1.测试验证
上面我们已经把服务都配置好了,此时我们先按照标准要求从client向pushgateway推送测试一下
echo "push_test 123" | curl --data-binary @- http://192.168.60.50:9091/metrics/job/test
上述测试的目的是,在被监控的机器上,向pushgateway发送了一条数据,内容是“push_test 123”,指标名称是“push_test”,指标值是“123”;
推送URL :pushgateway默认采用9091端口,路径:/metrics/job/<JOBNAME>{/<LABEL_NAME>/<LABEL_VALUE>}
<JOBNAME>是job标签的值,后面跟任意数量的标签对,instance标签可以有也可以没有。
2.示例脚本
a.准备脚本
为了一次性演示正常推送、推送指标与node_exporter的指标结合使用的实例,特意写了以下的脚本。
脚本说明:
我们的服务器需要监控open files的实际使用量大小,而node_exporter只找到了open files的最大值,没有找到open files的实际使用值,因此需要我们使用脚本获取,然后在grafana上通过计算展示使用率
[root@localhost script]$ cat chk_ofs.sh
#!/bin/bash
currops=`/usr/sbin/lsof -u mix_usr | wc -l` #获取用户mix_usr的打开句柄数
echo "curr_open_files $currops" | curl --data-binary @- http://192.168.60.50:9091/metrics/job/node-exporter/instance/kp-192.168.52.254 #此处标明了instance,以方便我们在一个instance里面对数据进行引用
给脚本执行权限,然后执行测试一下
[root@localhost script]$ chmod +x chk_ofs.sh
[root@localhost script]$ ./chk_ofs.sh
[root@localhost script]$
通过Prometheus我们可以查询到已经成功获取
b.将脚本加入定时任务,每分钟跑一次
* * * * * /opt/prome/script/chk_ofs.sh
配置grafana
通过上边,我们已经把数据源搞定了,接下来就通过grafana展示出来
grafana如下: