浅谈Telegraf+InfluxDB+Grafana快速搭建简易实时监控系统

时间:2024-03-20 22:56:32

监控从来都是一个很宽泛的问题,任何可能出问题的地方都需要加入监控。全量监控的确是监控的终极目标。在搭建一套监控系统前,需要结合实际的系统情况和发展趋势进行考量。在作者看来,一套监控系统应主要由数据采集、数据存储、数据展示三部分构成。作者经过大量阅读相关资料后,最终选择了Telegraf+InfluxDB+Grafana这套方案。接下来,作者就对这套监控系统方案进行简要的介绍。

 

 

  • Telegraf+InfluxDB+Grafana相关介绍

 

讲这套方案前,先简要介绍一下InfluxData这家公司。InfluxData是一家从事物联网设备数据捕捉、分析的大数据公司。InfluxDB是InfluxData的核心产品。InfluxDB是一个开源分布式时序、时间和指标数据库,使用Go语言编写,无需外部依赖。其设计目标是实现分布式和水平伸缩扩展。目前已经有超过40000个独立网站在使用InfluxDB,其中包括IBM、CISCO、ebay、NORDSTORM、Mozilla等知名公司。通过InfluxData提供的时间序列平台系统框图,我们可以对该平台的功能有一个概览,如图-1所示。

浅谈Telegraf+InfluxDB+Grafana快速搭建简易实时监控系统

图-1 InfluxData提供的时间序列平台组件图

该平台可以为以下需求提供服务:

浅谈Telegraf+InfluxDB+Grafana快速搭建简易实时监控系统

图-2 时间序列平台服务对象

该方案中,作者所采用的是该时间序列平台中的数据采集(Telegraf)和数据存储(InfluxDB)部分。数据展示部分,由于InfluxData公司的Chronograf为新推出产品,相较于目前广泛使用的Grafana还不够成熟,因此暂不考虑,可作为该方案中数据展示部分的备选方案。下面作者就所采用的方案进行分块讲解:

 

(1)     Telegraf——数据采集部分

Telegraf是一个用Go语言编写的代理程序,可采集系统和服务的统计数据,并写入InfluxDB数据库。Telegraf具有内存占用小的特点,通过插件系统开发人员可轻松添加支持其他服务的扩展。目前,最新版Telegraf支持的插件主要有:

 

  • Apache
  • DNS query time
  • Docker
  • http Listener
  • MySQL
  • Network Response
  • Tomcat
  • Zookeeper
  • TCP Listener

目前Telegraf尚不支持Oracle数据库统计数据的实时监控。

 

(2)     InfluxDB——数据存储部分

InfluxDB 是一个开源分布式时序、事件和指标数据库。使用 Go 语言编写,无需外部依赖。其设计目标是实现分布式和水平伸缩扩展。

浅谈Telegraf+InfluxDB+Grafana快速搭建简易实时监控系统

图-3 时间序列数据库性能排名

图-3是2016年2月份DB-Engines给出的时间序列数据库性能排名。可以看到InfluxDB是所有时间序列数据库中综合表现最好的。

 

InfluxDB有三大特性:

1. Time Series (时间序列):可以使用与时间有关的相关函数(如最大,最小,求和等)

2. Metrics(度量):你可以实时对大量数据进行计算

3. Eevents(事件):它支持任意的事件数据

 

特点

Schemaless(无结构),可以是任意数量的列

Scalable(可扩展):min, max, sum, count, mean, median 一系列函数,方便统计

Native HTTP API, 内置http支持,使用http读写

Powerful Query Language 类似sql

自带压力测试工具等,功能强大

 

(3)     Grafana——数据展示部分

Grafana是一个纯html/js的web应用,是一个开源仪表盘工具,访问InfluxDB时不会存在跨域访问的限制,只要配置好数据源后,即可展示监控数据。

 

特点:

1.      丰富的数据源接口,支持InfluxDB、MySQL、ElasticSearch、PostgreSQL等多数据源

2.      丰富的API接口,方便自动化程序调用

3.      监控dashboard导入导出,制作好模板后导入后修改参数即可实现实时监控

4.      支持复杂的告警规则及邮件告警

 

 

  • Telegraf+InfluxDB+Grafana安装及配置

 

在介绍了相关的组件后,下面我们就进入到动手操作的环节,也是干货部分。

(1)   InfluxDB的安装及配置

InfluxDB作为数据存储模块,可直接安装至被监控的目标主机,也可部署在独立的服务器上。目前,InfluxDB的集群模式是收费的,作者只简单通过单机模式进行展示。作者所使用的目标主机操作系统版本为RedHat Enterprise Linux 6.4。截止至目前,InfluxDB的最新版本为v1.5.2。

 

  • 下载方式:

1.如果服务器无法连接外网,可以到influxdata的官网进行相关下载,下载的网址是https://portal.influxdata.com/downloads,然后通过ftp工具上传至服务器进行安装

2. 如果服务器可以直连外网,可通过终端输入命令wget https://dl.influxdata.com/influxdb/releases/influxdb-1.5.2.x86_64.rpm进行相关下载

 

  • 安装InfluxDB

sudo yum localinstall influxdb-1.5.2.x86_64.rpm

 

  • 启动InfluxDB服务、添加开机启动

service influxdb start

systemctl enable influxdb

service influxdb status

 

  • 创建数据库

1.  进入influxDB

influx

2.  展示用户

> show users

3.  创建用户

> create user “pcbank”with password ‘pcbank’

4.  展示数据库、

> show databases

5.  新建数据库

> create database pcbankDB

 

  • 查看influxdb当前状态信息

influxd

浅谈Telegraf+InfluxDB+Grafana快速搭建简易实时监控系统

 

  • 查看influxdb目前配置

influxd config

浅谈Telegraf+InfluxDB+Grafana快速搭建简易实时监控系统

其他influxdb相关基本操作可参考文末相关链接

 

(2)   Telegraf的安装及配置

Telegraf作为数据采集模块,需要安装至被监控的目标主机上。作者所使用的目标主机操作系统版本为RedHat Enterprise Linux 6.4。截止至目前,telegraf的最新版本为v1.6.0。

 

  • 下载方式:

1.如果服务器无法连接外网,可以到influxdata的官网进行相关下载,下载的网址是https://portal.influxdata.com/downloads,然后通过ftp工具上传至服务器进行安装

2. 如果服务器可以直连外网,可通过终端输入命令wget https://dl.influxdata.com/telegraf/releases/telegraf-1.6.0-1.x86_64.rpm进行相关下载

 

  • 安装telegraf

sudo yum localinstalltelegraf-1.6.0-1.x86_64.rpm

 

  • 配置telegraf

Telegraf非常方便的一点就在于其配置驱动的特点。通过直接修改.conf配置文件即可实时将数据写入数据源。

首先,我们需要配置telegraf需要写入的数据源,我们选择本机的influxdb作为数据源写入,配置如下:

浅谈Telegraf+InfluxDB+Grafana快速搭建简易实时监控系统

其次,我们需要配置一些基本的监控项,具体配置如下:

浅谈Telegraf+InfluxDB+Grafana快速搭建简易实时监控系统

浅谈Telegraf+InfluxDB+Grafana快速搭建简易实时监控系统

l  启动telegraf服务、添加开机启动

systemctl start telegraf.service

service telegraf status

systemctl enable telegraf.service

 

(3)   Grafana的安装及配置

Grafana作为前端展示及监控告警工具,可以安装在和influxdb有网络连接的任意主机上。截止至目前,Grafana的最新版本为5.0.4。

 

  • 下载方式

1.      登录https://grafana.com/grafana/download下载

2.      对于Redhat或Centos操作系统的主机:

wget https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-5.0.4-1.x86_64.rpm

 

  • 安装Grafana

sudo yum localinstallgrafana-5.0.4-1.x86_64.rpm

 

  • 配置Grafana告警邮箱

cd /etc/grafana/

vi grafana.ini

/smtp找到smtp的配置

#################################### SMTP /Emailing ##########################

[smtp]

enabled = true

host = smtp.163.com:25

user = [email protected]

# If the password contains # or ; you have towrap it with trippel quotes. Ex """#password;"""

password = 987654321

;cert_file =

;key_file =

skip_verify = true

from_address = [email protected]

from_name = Grafana Alert

# EHLO identity in SMTP dialog (defaults toinstance_name)

;ehlo_identity = dashboard.example.com

 

[emails]

;welcome_email_on_sign_up = false

 

 

  • 启动服务、添加开机启动

systemctl daemon-reload

systemctl start grafana-server

systemctl status grafana-server

systemctl enablegrafana-server.service

 

 

  • Grafana使用及配置

登录http://localhost:3000,默认用户名admin,密码admin。

浅谈Telegraf+InfluxDB+Grafana快速搭建简易实时监控系统

进入后,首先选择Data Sources,添加需要的数据源,如下图所示。

浅谈Telegraf+InfluxDB+Grafana快速搭建简易实时监控系统

然后进入dashboard页面,创建仪表盘。我们可以通过访问https://grafana.com/dashboards来查看已经由其他用户共享的仪表盘,选取合适的使用,缩短上手时间。在这里,作者选取的是https://grafana.com/dashboards/1443这个仪表盘,该仪表盘内已经基本涵盖一个系统需要监控的相关参数。其telegraf相关配置如下:

[[inputs.net]]

#   ##By default, telegraf gathers stats from any up interface (excluding loopback)

#   ##Setting interfaces will tell it to gather these explicit interfaces,

#   ##regardless of status.

#   ##

interfaces = ["eth0,eth1,lo"]

[[inputs.cpu]]

  ##Whether to report per-cpu stats or not

 percpu = true

  ##Whether to report total system cpu stats or not

 totalcpu = true

  ## Iftrue, collect raw CPU time metrics.

 collect_cpu_time = false

# Read metrics about disk usage by mountpoint

[[inputs.disk]]

  ## Bydefault, telegraf gather stats for all mountpoints.

  ##Setting mountpoints will restrict the stats to the specified mountpoints.

  #mount_points = ["/"]

 

  ##Ignore some mountpoints by filesystem type. For example (dev)tmpfs (usually

  ##present on /run, /var/run, /dev/shm or /dev).

 ignore_fs = ["tmpfs", "devtmpfs"]

# Read metrics about disk IO by device

[[inputs.diskio]]

  ## Bydefault, telegraf will gather stats for all devices including

  ##disk partitions.

  ##Setting devices will restrict the stats to the specified devices.

  #devices = ["sda", "sdb"]

  ##Uncomment the following line if you need disk serial numbers.

  #skip_serial_number = false

 

 

# Get kernel statistics from /proc/stat

[[inputs.kernel]]

  # noconfiguration

 

 

# Read metrics about memory usage

[[inputs.mem]]

  # noconfiguration

 

 

# Get the number of processes and group themby status

[[inputs.processes]]

  # noconfiguration

 

 

# Read metrics about swap memory usage

[[inputs.swap]]

[[inputs.system]]

[[inputs.netstat]]

通过导入该仪表盘进入grafana后,选择我们需要的数据源,最终的监控仪表盘的效果如下:

浅谈Telegraf+InfluxDB+Grafana快速搭建简易实时监控系统

浅谈Telegraf+InfluxDB+Grafana快速搭建简易实时监控系统

通过对任意监控项进行编辑可以增加告警规则,如下图所示:

浅谈Telegraf+InfluxDB+Grafana快速搭建简易实时监控系统

最终,超出阈值会发送告警邮件,如下如所示:

浅谈Telegraf+InfluxDB+Grafana快速搭建简易实时监控系统

 

  • 总结

以上内容只是作者基于自己的认知所给出的方案,由于时间紧迫,不足之处在所难免,希望各位读者能多提意见和建议,相互交流才能成长。作者也希望通过方案分享这样的形式可以帮助到更多有需要的人。

 

最后,附上作者所参考的文章链接

 

开源社区中国

https://my.oschina.net/xxbAndy/blog?&search=telegraf

 

influxdb设置开启https

https://docs.influxdata.com/influxdb/v1.4/administration/https_setup/#setup-https-with-a-self-signed-certificate

 

基于Telegraf和InfluxDB的url监控方案

https://www.annhe.net/article-3605.html

 

利用Metrics+influxdb+grafana构建监控平台

https://www.jianshu.com/p/fadcf4d92b0e

 

Metrics —— JVM上的实时监控类库

https://www.jianshu.com/p/e4f70ddbc287

 

JAVAMetrics度量工具 - Metrics Core 翻译

http://blog.csdn.net/scutshuxue/article/details/8351810

 

metrics小常识

http://blog.csdn.net/tracymkgld/article/details/51899721

 

开源还是商用?十大云运维监控工具横评

http://www.oschina.net/news/67525/monitoring-tools

 

简析运维监控系统及Open-Falcon

http://blog.csdn.net/puma_dong/article/details/51895063

 

NetkillerLinux Monitoring 手札

http://netkiller.github.io/monitoring/index.html

 

小米运维—互联网企业级监控系统实践

https://www.jianshu.com/p/b2f77285266c

 

grafana+influxdb+telegraf监控服务器cpu,内存和硬盘

https://www.jianshu.com/p/dfd329d30891

 

新一代监控平台整合telegraf、influxdb、garafana

http://blog.51cto.com/michaelkang/1759877

 

grafana +influxdb + telegraf , 构建性能监控平台

https://www.cnblogs.com/Scissors/p/5977670.html

 

快速部署Telegraf & Influxdb

https://www.cnblogs.com/deykenlee/p/7565647.html

 

Grafana搭建-优化zabbix图形显示

http://blog.51cto.com/ixhao/1847284

 

[开发方案] 看大众点评如何通过实时监控系统CAT打造7*24服务

http://udn.yyuap.com/thread-24395-1-1.html

 

Telegraf+ InfluxDB收集系统性能,Grafana图形展示

http://blog.csdn.net/qq942477618/article/details/59579511

 

IoT实时数据可视化方案:Grafana+InfluxDB+Telegraf+MQTT协议+Windows 10

https://segmentfault.com/a/1190000012514865

 

Docker监控方案(TIG)的研究与实践之Telegraf

https://www.jianshu.com/p/5e3ca9096caf

 

如何看待influxdb集群功能不再开源?

https://www.zhihu.com/question/42150020

 

Windows下本机简易监控系统搭建(Telegraf+Influxdb+Grafana)

https://www.cnblogs.com/liugh/p/6683488.html

 

telegraf+influxdb+grafana+springboot构建监控平台

http://blog.csdn.net/soongp/article/details/66974529

 

spring对接InfluxDB(一)--创建数据库和数据写入

http://blog.csdn.net/qq_35981283/article/details/75408859

 

StatsDMetric

https://www.jianshu.com/p/2b0aa5898dd7

 

使用 StatsD + Grafana + InfluxDB 搭建 Node.js 监控系统

https://www.v2ex.com/t/328124

 

telegraf+influxdb+grafana+springboot构建监控平台

http://blog.csdn.net/soongp/article/details/66974529

 

时序数据库技术体系 –初识InfluxDB

http://hbasefly.com/2017/12/08/influxdb-1/

 

小米开源项目:Open-Falcon|互联网企业级监控系统

http://open-falcon.com/community/

 

开源监控利器grafana

https://www.cnblogs.com/txwsqk/p/3974915.html

 

Grafana安装配置介绍

http://www.ywnds.com/?p=5903

 

InfluxDB系列学习教程目录

https://www.linuxdaxue.com/influxdb-study-series-manual.html

 

开源监控系统中 Zabbix 和 Nagios 哪个更好?

https://www.zhihu.com/question/19973178

 

MeasureAnything, Measure Everything

https://codeascraft.com/2011/02/15/measure-anything-measure-everything/

 

使用Prometheus+Grafana监控MySQL实践

http://www.ywnds.com/?p=9656

 

java服务端监控平台设计

http://blog.csdn.net/rosanu_blog/article/details/50585162

 

目前流行的开源监控框架有哪些

http://blog.csdn.net/moonpure/article/details/78294835