背景

写这篇文章的初衷,在于网上文章虽多,但却千篇一律,而且对于一些存在的坑并未涉及到。完全参照网上教程的话,可能会存在各组件不知如何关联的问题;同时本文对多节点的telegraf数据采集以及组件服务化都进行了总结,保证按文章部署后,就是一套切实可用的监控系统。

操作

telegraf部署

下载:wget https://dl.influxdata.com/telegraf/releases/telegraf-1.8.3_linux_amd64.tar.gz
解压:tar -zxvf telegraf-1.8.3_linux_amd64.tar.gz
生成配置文件:telegraf --input-filter cpu:mem:disk:diskio:net --output-filter influxdb:opentsdb config > ../../etc/telegraf/telegraf.d/telegraf.conf
启动:./usr/bin/telegraf --config [配置文件路径]
(现在可以先不启动,组件服务化的时候,直接启动服务即可)

influxdb部署

下载:https://dl.influxdata.com/influxdb/releases/influxdb-0.13.0_linux_amd64.tar.gz
解压:tar -zxvf influxdb-0.13.0_linux_amd64.tar.gz
启动:./usr/bin/influxd run
(现在可以先不启动,组件服务化的时候,直接启动服务即可)

grafana部署

https://dl.grafana.com/oss/release/grafana-6.4.4.linux-amd64.tar.gz解压:tar -zxvf grafana-6.4.4.linux-amd64.tar.gz
启动:./grafana-server
(现在可以先不启动,组件服务化的时候,直接启动服务即可)

组件服务化

上述现在解压等部署前操作完成后,进入正题,尝试将所有组件做服务化处理。

注意:该服务组件化操作是在Ubuntu 16.04环境下操作的,其他linux发行版不保证操作的可行性。

基本思路为:通过shell脚本封装上述组件启动的start方法、停止的stop方法以及重启的restart方法(对应service的不同方法),将组件的控制脚本放到/usr/sbin目录下(理论上其他目录也可以,只要service描述文件上路径定义正确即可,未尝试,感兴趣的同学可以自己去操作下);定义各组件service的描述文件,指明控制脚本路径

编写启动脚本

我们编写脚本的目的是为了便于直接调命令执行各组件启动、结束、重启的等操作,下面以telegraf服务的脚本为例,介绍如何创建启动脚本,脚本内容如下

1 #!/bin/bash
 2 # PROG表示自己部署的进程对应的名称
 3 PROG="telegraf"
 4 # 请将下述两个PATh换程自己文件的路径
 5 PROG_PATH="./telegraf/usr/bin/"
 6 PROG_CONF_PATH="./telegraf/etc/telegraf/telegraf.d/telegraf.conf"
 7 PROG_ARGS=""
 8 PID_PATH="/var/run/"
 9 start()
10 {
11     echo "start $PROG"
12     if [ -e "$PID_PATH/$PROG.pid" ]; then
13         ## Program is running, exit with error.
14         echo "Error! $PROG is currently running!" 1>&2
15         exit 1
16     else
17         cd $PROG_PATH
18         nohup ./$PROG --config $PROG_CONF_PATH &
19     if [ $? -ne 0 ];then
20             echo "Error! $PROG run failed, please try again!"
21         else
22             pid=`ps ax | grep -i "$PROG" | grep -v grep | awk '{print $2}'`
23             echo "start $PROG ok!"
24             echo $pid > "$PID_PATH/$PROG.pid"
25             exit 0;
26     fi
27     fi
28 }
29 
30 stop()
31 {
32     echo "stop $PROG"
33     if [ -e "$PID_PATH/$PROG.pid" ]; then
34         pid=`ps ax | grep -i "$PROG" | grep -v grep | awk '{print $2}'`
35         kill $pid
36         rm -f  "$PID_PATH/$PROG.pid"
37         echo "stop $PROG ok!"
38     else
39         echo "Error! $PROG not started!" 1>&2
40         exit 1
41     fi
42 }
43 
44 ## Check to see if we are running as root first.
45 ## Found at http://www.cyberciti.biz/tips/shell-root-user-check-script.html
46 if [ "$(id -u)" != "0" ]; then
47     echo "This script must be run as root" 1>&2
48     exit 1
49 fi
50 
51 case "$1" in
52 start)
53     start
54     ;;
55 stop)
56     stop
57     ;;
58 restart)
59     stop
60     start
61     ;;
62 *)
63     echo "usage: $0 start|stop|restart"
64     exit 0
65 esac
66 exit

添加服务

下面以新建influxd服务为例,介绍添加服务的步骤。进入服务描述文件所在目录

cd /lib/systemd/system

新建一个service描述文件

vim influxd.service

 其中service描述文件的内容如下 

1 [Unit]
 2 Description=influxd
 3 After=syslog.target network.target remote-fs.target nss-lookup.target
 4 
 5 [Service]
 6 Type=forking
 7 ExecStart=/usr/sbin/influxd start
 8 ExecStop=/usr/sbin/influxd stop
 9 PrivateTmp=true
10 
11 [Install]
12 WantedBy=multi-user.target

上述脚本中,Description是服务的描述信息,After表示服务依赖哪些服务,ExecStart表示服务开启的命令,ExecStop表示服务停止的命令,上述内容根据前面编写的启动脚本修改即可。

注意:添加或者修改*.service文件后,执行命令systemctl daemon-reload进行重载service配置文件

服务创建后,依次执行service influxd start 、service telegraf start 、service grafana start命令启动服务。

其中influx数据库的web访问页面为*:8083,grafana的web访问页面为*:3000

Telegraf多节点部署

创建数据库用户

在influxd命令行或者数据库web页面(*:8083)中执行新增数据库用户操作,命令如下

CREATE USER "username" WITH PASSWORD 'password' WITH ALL PRIVILEGES

修改telegraf配置

登录部署telegraf的节点,修改telegraf的配置文件如下

grafana如何监控cpu_linux

 小结

总体来说,搭建一套上述监控系统还是一件比较容易的事情,但是可能一些细节上的问题,会影响到操作的便利性;下一讲,我将会介绍如何修改一些配置文件,使监控面板上能够正常的展示数据