登录
  • 人们都希望被别人需要 却往往事与愿违
  • 大多数人在 20 到 30 岁就已经过完自己的一生。一过了这个年龄段, 他们就变成自己的影子, 以后的生命只是在不断重复自己 @《约翰. 克里斯朵夫》罗曼 · 罗兰

使用 grafana+influxdb+telegraf 安全的搭建一个监控平台

Linux Benny 小土豆 7597 次浏览 3573 字 3 个评论
文章目录 [显示]

作为一只有很多服务器的萌新,实时掌握服务器的状态是非常必须的。

前段时间,由于 NodeQuery 出问题了,于是就想着换一个监控平台。当然在移除 nq-agent 的时候就手抖给 / etc 删除了

那么今天就来记录一下如何搭建一个中心化的监控平台。

一些概念的明确

既然要监控服务器,那么必然要有一个程序运行在服务器上,这个我们一般称作 agent,在我们这里就是 telegraf;另外一个负责解析,存储,展示数据的,在我们这里就是 InfluxDB 存储,grafana 展示解析数据。

如果使用 zabbix 的话,那么 zabbix-agent 就充当了采集器,zabbix-server 和 zabbix-frontend 就充当了解析展示数据的。(zabbix 太丑了,模板不会配……)

架构的设计

由于需要监控多台服务器,那么架构的设计也是一个问题,对于需要跨公网而不是全内网的情况来说,有这样两种思路:

  • 被动模式:采集器收集数据,发送给 server,这种架构要求 server 必须有公网 IP
  • 主动模式:采集器只是运行,由 server 主动访问采集器获得数据,这就需要所有的 agent 必须有公网 IP

对于被动模式,使用 Telegraf+InfluxDB+Grafana 是比较好的选择,只需要将 InfluxDB 部署在具有公网 IP 的服务器上就可以了,其他服务器是否具有公网 IP 并不重要。

对于主动模式,使用 node exporter+Prometheus+Grafana 是比较合适的。

对于两种都想要的呢!zabbix 啊,主动被动都支持,就是有点丑 (′д`)… 彡… 彡

所以总体的架构就是:

Telegraf --> InfluxDB <--> Grafana

安全性的考虑

由于数据需要跨公网传输,那么安全性上的考虑就是必不可少的了。那么这个问题怎么解决呢?

加密,认证,授权

在我们这种情景下,与 InfluxDB 之间的通信至少也要实现加密、认证的。

加密意味着与 InfluxDB 之间的通信是安全的,其他人无法解密,这一点在跨公网传输的时候是必不可少的

认证意味着只有特定身份的用户才可以访问数据,比如输入了正确的用户名和密码才可以访问;

授权意味着,你这个用户可以干什么事情,是只能查询还是什么都能干。

为了实现加密,我们可以使用 TLS 那一套,这一点就很好理解了,TLS 就是天生干这事的嘛。

为了实现认证与授权,我们可以使用 HTTP Basic Auth,创建一套用户名密码。

防火墙的保护

除了以上操作之外,使用防火墙限制访问数据库的源 IP 也是一种补充方法。当然了加密是必不可少的。除此之外,还有一些方法,比如 TLS 客户端证书等等。

大内网

有些时候配置上面这些太麻烦了,那么还有一个思路就是组建大内网!可以考虑用 WireGuard、OpenVPN 甚至是 SSH 隧道试试看。

不过也有缺点,一是如果服务器是海外的,那么由于 GFW 的存在,可能有点不太友好;二是可能不太好配,尤其是 OpenVPN,一不小心就全局了。

部署与配置

下面就简单说说如何安全的配置这么一套平台

InfluxDB

https://portal.influxdata.com/downloads/

从页面上选择适合你的操作系统的版本,对于我使用的 Ubuntu 来说,使用这个就可以了

  1. wget https://dl.influxdata.com/influxdb/releases/influxdb_1.7.7_amd64.deb
  2. sudo dpkg -i influxdb_1.7.7_amd64.deb

配置 SSL

这一步我们可以使用 openssl 自签名的证书,也可以使用 Let’s Encrypt 申请一个真正的证书(这就需要弄个域名啦)

以自签名证书来说

  1. sudo openssl req -x509 -nodes -newkey rsa:2048 -keyout /etc/ssl/influxdb-selfsigned.key -out /etc/ssl/influxdb-selfsigned.crt -days 3650
  2. chown influxdb:influxdb /etc/ssl/influxdb-selfsigned.*

修改配置文件 /etc/influxdb/influxdb.conf,需要更改三处

  1. https-enabled = true
  2.  
  3. https-certificate = "/etc/ssl/influxdb-selfsigned.crt"
  4. https-private-key = "/etc/ssl/influxdb-selfsigned.key"

如果使用 Let’s Encrypt 的话,https-certificate改为fullchain.pem的路径,https-private-key改为privkey.key的路径,注意下权限就可以了。

然后重启

  1. sudo systemctl restart influxdb

验证

  1. influx -ssl -unsafeSsl -host <domain_name>.com

配置认证与授权

创建一个管理员用户

使用上述influx -ssl -unsafeSsl -host <domain_name>.com登录到服务器

  1. CREATE USER paul WITH PASSWORD 'timeseries4days' WITH ALL PRIVILEGES

开启认证

修改配置文件/etc/influxdb/influxdb.conf

  1. auth-enabled = true

重启进程

  1. sudo systemctl restart influxdb

此时再使用influx -ssl -unsafeSsl -host <domain_name>.com登录到服务器,show databases就会报错,只有 auth 之后才可以

Telegraf

https://github.com/influxdata/telegraf/releases

https://portal.influxdata.com/downloads/

从以上网址下载对应你的操作系统版本的 Telegraf,然后安装(armhf 对应树莓派)

配置数据库服务器

编辑/etc/telegraf/telegraf.conf,找到 urls=...,改成 https 就好了

  1. urls = ["https://<domain_name>.com:8086"]
  2. database = "telegraf"

需要注意的是,如果使用的是自签名证书,那么insecure_skip_verify = true也要配置

配置认证

编辑/etc/telegraf/telegraf.conf

根据上面配置的进行适当更改

  1. timeout = "5s"
  2.  
  3. username = "telegraf" #?
  4. password = "metricsmetricsmetricsmetrics" #?

配置采集内容

把这些追加到 telegraf.conf 末尾就可以了

  1. [[inputs.cpu]]
  2. percpu = true
  3. totalcpu = true
  4. collect_cpu_time = false
  5. report_active = false
  6. [[inputs.disk]]
  7. ignore_fs = ["tmpfs", "devtmpfs", "devfs"]
  8. [[inputs.io]]
  9. [[inputs.mem]]
  10. [[inputs.net]]
  11. [[inputs.system]]
  12. [[inputs.swap]]
  13. [[inputs.netstat]]
  14. [[inputs.processes]]
  15. [[inputs.kernel]]

Grafana

https://grafana.com/grafana/download

同样下载安装适合自己平台的程序

然后 http://ip:3000

默认的用户名密码是 admin、admin

Add datasource 选择 influxdb,按照如下图所示配置

使用grafana+influxdb+telegraf安全的搭建一个监控平台

导入 dashboard

导入这个 dashboard

https://grafana.com/dashboards/5955

使用grafana+influxdb+telegraf安全的搭建一个监控平台

之后保存就可以看到结果啦!

使用grafana+influxdb+telegraf安全的搭建一个监控平台

其他优化

配置防火墙

只允许某个 IP 访问 8086

  1. ufw allow from xx.xx.xx.xx to any port 8086

参考资料

https://docs.influxdata.com/influxdb/v1.7/administration/https_setup/

https://docs.influxdata.com/influxdb/v1.7/administration/authentication_and_authorization/

https://grafana.com/dashboards/5955

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

https://grafana.com/docs/installation/behind_proxy/

 


文章版权归原作者所有丨本站默认采用 CC-BY-NC-SA 4.0 协议进行授权 |
转载必须包含本声明,并以超链接形式注明原作者和本文原始地址:
https://dmesg.app/grafana-influxdb-telegraf.html
喜欢 (23)
分享:-)
关于作者:
If you have any further questions, feel free to contact me in English or Chinese.
发表我的评论
取消评论

                     

去你妹的实名制!

  • 昵称 (必填)
  • 邮箱 (必填,不要邮件提醒可以随便写)
  • 网址 (选填)
(3) 个小伙伴在吐槽
  1. 我觉得还是自己写一套比较合适
    anomymous2019-07-17 23:05 回复
  2. 又来膜拜大佬了,准备啥时候自己也整一下
    弦上韫玉 2019-07-11 09:50 回复
    • 买个 pi4 来搞!
      Benny 小土豆 2019-07-11 09:52 回复
您直接访问了本站! 莫非您记住了我的域名. 厉害~ 我倍感荣幸啊 嘿嘿