我花了一些时间设置 Linux(在我的例子中是 CentOS)作为家用路由器,因为对市场上可用的家用路由器感到沮丧。这既是一次很好的练习,也是对我早期使用 Linux 的一点怀旧。完成基本设置后,我想要一种方法来跟踪各种统计信息,例如网络流量、磁盘使用情况等。久经考验的 Cacti 当然是一个选择,但现在感觉有点过时了。我更喜欢使用更新的、更现代的工具。这就是我选择 Grafana 的原因。这是一个关于我如何设置的基本演练。这是一个基本的安装,它在同一主机上集成了 collectd、InfluxDB 和 Grafana。

opensource.com
Collectd
什么,你以为我会直接跳到 Grafana 吗?我们首先需要收集数据,在 CentOS 上做到这一点的最佳方法是通过 collectd。
在 CentOS 上获取 collectd 最简单的方法是通过 EPEL 存储库。如果您是 CentOS 的新手,或者不熟悉 Fedora 的 EPEL 存储库,只需执行以下命令即可开始
yum install epel-release
现在 EPEL 存储库已启用,以相同方式安装 collectd 就很容易了
yum install collectd
EPEL 中还有其他 collectd 插件可用,但基本插件足以满足我们在此处的目的。如果基本插件不能满足您的需求,我鼓励您探索可用的插件。
现在 collectd 已安装,我们需要配置它以发送数据。Collectd 生成统计数据,但我们需要将其放在 Grafana 可以使用的地方。
在 /etc/collectd.conf 中,我们需要配置一些内容。在 Global 部分,取消注释 Hostname、BaseDir、PIDFile、PluginDir 和 TypesDB 的行。您需要修改 Hostname,但其余的默认值应该可以。它应该看起来像这样
Hostname "YourHostNameHere"
#FQDNLookup true
BaseDir "/var/lib/collectd"
PIDFile "/var/run/collectd.pid"
PluginDir "/usr/lib64/collectd"
TypesDB "/usr/share/collectd/types.db"
现在我们已经设置了基本的应用程序信息,我们需要启用我们要使用的插件。例如,我取消注释了 syslog、cpu、disk、interface、load、memory 和 network。在这些插件中,除了 network 之外,所有插件的默认值都很好。network 插件用于将数据发送到我们的收集器,在本例中是 InfluxDB。network 插件需要指向您的 InfluxDB 服务器。因为我们在这个例子中都在本地完成所有操作,所以我们指向 localhost。它应该看起来像这样
<Plugin network>
Server "127.0.0.1" "8096"
</Plugin>
InfluxDB
现在我们已经完成了 collectd,我们必须配置 InfluxDB 以拉取 collectd 正在生成的数据。由于 InfluxDB 不在 EPEL 中,我们将不得不从其存储库中拉取它。下面的命令使其变得容易
cat <<EOF > /etc/yum.repos.d/influxdb.repo
[influxdb]
name = InfluxDB Repository - RHEL \$releasever
baseurl = https://repos.influxdata.com/centos/\$releasever/\$basearch/stable
enabled = 1
gpgcheck = 1
gpgkey = https://repos.influxdata.com/influxdb.key
EOF
完成后,使用 yum install influxdb 安装软件包,然后就可以进行配置了。在 /etc/influxdb/influxdb.conf 配置文件中只需要完成几件事。
在您的 /etc/influxdb/influxdb.conf 的 [http] 部分中,设置 enabled = true 和 bind-address = ":8096"。它应该看起来像这样
[http]
# Determines whether HTTP endpoint is enabled.
enabled = true
# The bind address used by the HTTP service.
bind-address = ":8086"
然后向下滚动到 [[collectd]] 部分并像这样配置它
[[collectd]]
enabled = true
bind-address = ":8096"
database = "collectd"
typesdb = "/usr/share/collectd"
此时,我们可以继续启动这两项服务,以确保它们正常工作。首先,我们将启用 collectd 并确保它正在发送数据。与其他服务一样,我们将使用 system 来完成此操作。在下面的示例中,您将看到使用的命令和正在运行的 collectd 守护程序的输出。
[jperrin@monitor ~]$ sudo systemctl enable collectd
[jperrin@monitor ~]$ sudo systemctl start collectd
[jperrin@monitor ~]$ sudo systemctl status collectd
● collectd.service - Collectd statistics daemon
Loaded: loaded (/usr/lib/systemd/system/collectd.service; enabled; vendor preset: disabled)
Active: active (running) since Sat 2017-08-02 11:22:18 PDT; 6min ago
Docs: man:collectd(1)
man:collectd.conf(5)
Main PID: 18366 (collectd)
CGroup: /system.slice/collectd.service
└─18366 /usr/sbin/collectd
Aug 2 11:22:18 monitor collectd[18366]: plugin_load: plugin "disk" successfully loaded.
Aug 2 11:22:18 monitor collectd[18366]: plugin_load: plugin "interface" successfully loaded.
Aug 2 11:22:18 monitor collectd[18366]: plugin_load: plugin "load" successfully loaded.
Aug 2 11:22:18 monitor collectd[18366]: plugin_load: plugin "memory" successfully loaded.
Aug 2 11:22:18 monitor collectd[18366]: plugin_load: plugin "network" successfully loaded.
Aug 2 11:22:18 monitor collectd[18366]: Systemd detected, trying to signal readyness.
Aug 2 11:22:18 monitor collectd[18366]: Initialization complete, entering read-loop.
Aug 2 11:22:18 monitor systemd[1]: Started Collectd statistics daemon.
现在 collectd 正在工作,启动 InfluxDB 并确保它正在从 collectd 收集数据。
[jperrin@monitor ~]$ sudo systemctl enable influxdb
[jperrin@monitor ~]$ sudo systemctl start influxdb
[jperrin@monitor ~]$ sudo systemctl status influxdb
● influxdb.service - InfluxDB is an open-source, distributed, time series database
Loaded: loaded (/usr/lib/systemd/system/influxdb.service; enabled; vendor preset: disabled)
Active: active (running) since Sat 2017-07-29 18:28:20 PDT; 1 weeks 6 days ago
Docs: https://docs.influxdb.org.cn/influxdb/
Main PID: 23459 (influxd)
CGroup: /system.slice/influxdb.service
└─23459 /usr/bin/influxd -config /etc/influxdb/influxdb.conf
Aug 2 10:35:10 monitor influxd[23459]: [I] 2017-08-12T17:35:10Z SELECT mean(value) FROM collectd.autogen.cpu_value WHERE host =~ /^monitor$/ AND type_instance = 'interrupt' AND time > 417367h GR...) service=query
Aug 2 10:35:10 monitor influxd[23459]: [httpd] 172.20.1.40, 172.20.1.40,::1 - - [12/Aug/2017:10:35:10 -0700] "GET /query?db=collectd&epoch=ms&q=SELECT+mean%28%22value%22%29+FROM+%22load_shortte...ean%28%22value%
Aug 2 10:35:10 monitor influxd[23459]: [I] 2017-08-02T17:35:10Z SELECT mean(value) FROM collectd.autogen.cpu_value WHERE host =~ /^monitor$/ AND type_instance = 'nice' AND time > 417367h GROUP B...) service=query
正如我们在上面的输出中看到的那样,该服务正在工作,并且正在收集数据。从这里开始,唯一剩下的就是通过 Grafana 展示它。
Grafana
要安装 Grafana,我们将像对 InfluxDB 所做的那样创建另一个存储库。不幸的是,Grafana 的人员没有在存储库中单独保存发布版本,所以这看起来我们正在使用 EL6 存储库,即使我们正在 EL7 上完成这项工作。
cat <<EOF > /etc/yum.repos.d/grafana.repo
[grafana]
name=grafana
baseurl=https://packagecloud.io/grafana/stable/el/6/$basearch
repo_gpgcheck=1
enabled=1
gpgcheck=1
gpgkey=https://packagecloud.io/gpg.key https://grafanarel.s3.amazonaws.com/RPM-GPG-KEY-grafana
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
EOF
现在存储库已就位并已启用,我们可以安装 Grafana,就像我们对其他存储库所做的那样:yum install grafana。完成后,我们可以开始配置。对于本教程,我们只设置一个管理员用户名和密码,因为我们正在为教程和单个用户实例执行此操作。如果您想开始更多地使用 Grafana,我绝对鼓励您阅读文档。
要完成此相当基本的配置,只需取消注释 /etc/grafana/grafana.ini 的 [security] 部分中的 admin_user 和 admin_password 行,并设置您自己的值。在本例中,我使用 admin/admin,因为在示例中通常这样做,对吧?
[security]
# default admin user, created on startup
admin_user = admin
# default admin password, can be changed before first start of grafana, or in profile settings
admin_password = admin
现在您可以使用 systemctl start grafana-server 启动 Grafana,并通过 Web 界面进行配置。首次登录后,系统将提示您配置一些内容,包括数据源和仪表板。因为我们都在本地主机上完成此操作,所以您将能够作弊并使用屏幕截图中的数据源设置。别担心,我们快完成了,只剩下一点点要做。
配置数据源后,系统将提示您创建您的第一个仪表板。虽然您当然可以这样做,但对于首次运行 Grafana 来说,这有点吓人。解决此问题的一个简单方法是从 Grafana 网站导入一个模板。我使用了 Host Overview。它提供了一组不错的指标和图表,作为使用和构建的基础。
设置好一切后,现在就取决于您的个人喜好和进一步的调整。我再次建议阅读文档,因为其中有很多选项和更改未在此处描述。
这最初发布在 Jim Perrin 的 博客上,并经许可重新发布。
5 条评论