登录
  • 人们都希望被别人需要 却往往事与愿违
  • 你写下的任何代码, 在六个月以后去看的话, 都像是别人写的@Tom Cargill

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

Linux Benny小土豆 6195次浏览 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来说,使用这个就可以了

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

配置SSL

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

以自签名证书来说

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

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

https-enabled = true

https-certificate = "/etc/ssl/influxdb-selfsigned.crt"
https-private-key = "/etc/ssl/influxdb-selfsigned.key"

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

然后重启

sudo systemctl restart influxdb

验证

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

配置认证与授权

创建一个管理员用户

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

CREATE USER paul WITH PASSWORD 'timeseries4days' WITH ALL PRIVILEGES

开启认证

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

auth-enabled = true

重启进程

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就好了

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

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

配置认证

编辑/etc/telegraf/telegraf.conf

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

timeout = "5s"

username = "telegraf" #?
password = "metricsmetricsmetricsmetrics" #?

配置采集内容

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

[[inputs.cpu]]
percpu = true
totalcpu = true
collect_cpu_time = false
report_active = false
[[inputs.disk]]
ignore_fs = ["tmpfs", "devtmpfs", "devfs"]
[[inputs.io]]
[[inputs.mem]]
[[inputs.net]]
[[inputs.system]]
[[inputs.swap]]
[[inputs.netstat]]
[[inputs.processes]]
[[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

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.
发表我的评论(代码和日志请使用Pastebin或Gist)
取消评论

                     

去你妹的实名制!

  • 昵称 (必填)
  • 邮箱 (必填,不要邮件提醒可以随便写)
  • 网址 (选填)
(3)个小伙伴在吐槽
  1. 我觉得还是自己写一套比较合适
    anomymous2019-07-17 23:05 回复
  2. 又来膜拜大佬了,准备啥时候自己也整一下
    弦上韫玉2019-07-11 09:50 回复
    • 买个pi4来搞!
      Benny小土豆2019-07-11 09:52 回复