背景

基础搭建篇我们讲了如何配置可移植的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的数据是最新的。

grafana拓扑图线路 grafana自动拓扑图_grafana拓扑图线路

安装配置

获取安装包

官方下载地址:https://prometheus.io/download/ 按照自己的系统选择合适的包,博主是CentOS7,选择如图所示

grafana拓扑图线路 grafana自动拓扑图_hg_02

配置

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.ymlscrape_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状态了

grafana拓扑图线路 grafana自动拓扑图_数据_03

脚本推送

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标签可以有也可以没有。

grafana拓扑图线路 grafana自动拓扑图_hg_04

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我们可以查询到已经成功获取

grafana拓扑图线路 grafana自动拓扑图_hg_05

b.将脚本加入定时任务,每分钟跑一次
* * * * * /opt/prome/script/chk_ofs.sh

配置grafana

通过上边,我们已经把数据源搞定了,接下来就通过grafana展示出来

grafana如下:

grafana拓扑图线路 grafana自动拓扑图_grafana拓扑图线路_06