最近一直想搞个监控系统来检测下大陆到国外的延时什么的, 但是 SmokePing 的图表太玄学了 而且界面像是上个世纪的 所以想坑一下计划了很久的 Grafana.

抽烟ping看得懂的,都是文森特凡高的后代啊(蔡博语)…… 来搞IT可惜了…… —— 某大佬

环境

本文接下来都在 Arch Linux 上安装 大部分软件的搭建使用 Docker 来保证别的系统也可用
数据储存在 /data

安装 Docker

对于其他系统, 官方已经准备了一键安装脚本 执行就好了

curl -sSL get.docker.com | bash

对于 Arch Linux 官方的源中已经有了 Docker 的存在

pacman -S docker
systemctl start docker
systemctl enable docker

Pull 所需的映像

  • influxdb:alpine
  • grafana/grafana
  • busybox:latest

Collectd

对于 Collectd 我们使用从包管理器安装的方法安装 而不是运行 Docker 映像 因为 Collectd 的数据收集 CPU 内存 网络使用 需要收集宿主机的信息

安装

默认包管理已经有现成的了

pacman -S collectd

其他系统请参考 官方教程

启动

使用 systemd 管理

systemctl enable collectd
systemctl start collectd

InfluxDB

首先我们需要生成配置文件

docker run --rm influxdb:alpine influxd config > influxdb.conf

这时候在本目录 /data 下可以看见 influxdb.conf 这一个配置文件了

运行

Docker 运行就好了

docker run -d -p 8086:8086 -p 8083:8083 -p 25826:25826/udp \
  -v /data/influxdb_volume:/var/lib/influxdb \
  -v /data/influxdb.conf:/etc/influxdb/influxdb.conf:ro \
  -v /usr/share/collectd/types.db:/usr/share/collectd/types.db \
  --restart=always --name influxdb \
  -e GOGC=10 \
  -e INFLUXDB_DATA_INDEX_VERSION=tsi1 \
  -e INFLUXDB_ADMIN_ENABLED=true \
  influxdb:alpine -config /etc/influxdb/influxdb.conf

这时候就运行了 influxdb

身份验证

通过 exec 进入容器创建账户

docker exec -it {container_id} bash
influx
# 创建账户
> CREATE USER <username> WITH PASSWORD '<password>' WITH ALL PRIVILEGES
# 创建数据库
> CREATE DATABASE collectdb
> quit
# ^P + Q 

然后编辑 influxdb.conf

$ nano influxdb.conf
# 找到 
# [http]
#  enabled = true
#  bind-address = ":8086"
#  auth-enabled = false     <---

auth-enabled 改为 true 然后保存退出 最后重启容器

docker restart {container_id}

这时候 InfluxDB 已经安装成功了

和 Collectd 对接

InfluxDB 部分

打开 influxdb.conf 配置文件
找到

[[collectd]]
  enabled = false             // <-----
  bind-address = ":25826"
  database = "collectd"       // <-----

将这里的 enable 改为 true 打开 collectd 收集
同时将 database 改为要收集到的数据库 根据上下文应该为 collectdb

注意 25826/udp 是可以绕过账户保护的 请对这个端口使用防火墙什么的

修改完成后重启 influxdb 接下来要修改 collectd 配置文件了

Collectd 部分

collectd 的配置文件在 /etc/collectd.conf
我使用的配置文件为

# cat /etc/collectd.conf
BaseDir "/etc/collectd"
PIDFile "/run/collectd.pid"
Hostname "localhost"
Interval 60
<loadplugin df> 
    Interval 120
</loadplugin>
LoadPlugin disk
LoadPlugin interface
LoadPlugin load
LoadPlugin memory
LoadPlugin network
LoadPlugin processes
LoadPlugin users
LoadPlugin ping
<plugin interface>
    Interface "eth0"
    IgnoreSelected false
</plugin>
<plugin network>
    Server "{ InfluxDB Host }" "25826"
</plugin>
<plugin ping>
    Host "{ Host you want to ping }"
    Host "{ Another host you want to ping }"
    Interval 5.0
    Timeout 0.9
    TTL 255
</plugin>

你可以参考我的配置文件对 collectd 进行配置
配置完成之后

systemctl restart collectd

Grafana

安装

Grafana 的安装很简单 只需要

docker run -d -v /var/lib/grafana --name grafana-storage busybox:latest
docker run \
  -d \
  -p 3000:3000 \
  --name=grafana \
  --volumes-from grafana-storage \
  grafana/grafana

访问 http://localhost:3000 就可以看到面板了
默认账号和密码都是 admin 请及时修改
Grafana Index

数据源

点击 Getting Started 中的 Add data source 我们来添加 influxdb 作为数据源
按照下图设置数据源 然后点击 Add 按钮 如果可以链接就代表成功了
Grafana Data Source

创建图表

Create Dashboard 然后选 Graph
然后点击 Panel Title 在弹出的选项中点击 Edit 然后就可以添加查询了
一个查询可能长这样
Grafana Add Query

成果

最后多添加几个查询 然后改下 Title 什么的 一个监控面板就出来了
Grafana Dashboard
当然这里没有细讲各个组件的高级应用 自己慢慢玩吧(

标签: linux, dashboard, monitor

评论已关闭

Debug: IPAddress: 18.212.222.217 Infos: Array ( [0] => 美国 [1] => 美国 [2] => [3] => )