使用 Grafana 监控 Linux 性能

通过在同一主机上集成 collectd、InfluxDB 和 Grafana 的基本安装来收集网络统计信息。
489 位读者喜欢这篇文章。
open source button on keyboard

Opensource.com

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

Grafana host interface

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 部分,取消注释 HostnameBaseDirPIDFilePluginDirTypesDB 的行。您需要修改 Hostname,但其余的默认值应该可以。它应该看起来像这样

Hostname    "YourHostNameHere"
#FQDNLookup   true
BaseDir     "/var/lib/collectd"
PIDFile     "/var/run/collectd.pid"
PluginDir   "/usr/lib64/collectd"
TypesDB     "/usr/share/collectd/types.db"

现在我们已经设置了基本的应用程序信息,我们需要启用我们要使用的插件。例如,我取消注释了 syslogcpudiskinterfaceloadmemorynetwork。在这些插件中,除了 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 = truebind-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_useradmin_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

grafana-collectd-datasource.png现在您可以使用 systemctl start grafana-server 启动 Grafana,并通过 Web 界面进行配置。首次登录后,系统将提示您配置一些内容,包括数据源和仪表板。因为我们都在本地主机上完成此操作,所以您将能够作弊并使用屏幕截图中的数据源设置。别担心,我们快完成了,只剩下一点点要做。

配置数据源后,系统将提示您创建您的第一个仪表板。虽然您当然可以这样做,但对于首次运行 Grafana 来说,这有点吓人。解决此问题的一个简单方法是从 Grafana 网站导入一个模板。我使用了 Host Overview。它提供了一组不错的指标和图表,作为使用和构建的基础。

设置好一切后,现在就取决于您的个人喜好和进一步的调整。我再次建议阅读文档,因为其中有很多选项和更改未在此处描述。

这最初发布在 Jim Perrin 的 博客上,并经许可重新发布。

标签

5 条评论

干得漂亮,Jim!

非常有趣。谢谢 )

在您的 /etc/influxdb/influxdb.conf 的 [http] 部分中,设置 enabled = true 和 bind-address = ":8096"。它应该看起来像这样

[http]
# 确定是否启用 HTTP 端点。
enabled = true

# HTTP 服务使用的绑定地址。
bind-address = ":8086"

那么,bind-address 的正确端口是 :8086 还是 :8096?

使用 vagrant 有什么建议吗?
谢谢,干杯。

Creative Commons 许可协议本作品根据 Creative Commons 署名-相同方式共享 4.0 国际许可协议获得许可。
© . All rights reserved.