记录下监控系统的搭建,现在平台监控是必须的,不然出了问题全靠猜。我们先用Grafana+InfluxDB+Telegraf来搭一个。为了方便,全部用Docker部署,Docker的知识就不介绍了。

搭建InfluxDB

监控数据的特点是采样频率高,每个数据点都带时间属性,对于写的速度和连续时间的查询速度要求高,因此传统的关系型数据库不适合。这时,时序数据库(TSDB)就是我们的首选。InfluxDB是一个知名的时序数据库,也被广泛使用,它的单机版是免费的,企业级的集群版要收费,而且还不便宜,但对于一般云平台的监控场景,免费版足够了。

  • 我们用”docker run”来拉镜像并启动容器,假设我们把数据存储挂载在本地”/home/user/influxdb”下

    $ docker run -d -p 8086:8086 -v /home/user/influxdb:/var/lib/influxdb --name=influxdb influxdb
    

注意,不挂载本地目录的话,每次重启容器,数据会丢失。

  • 通过”docker ps”查看下容器是否启动成功

    $ docker ps
    CONTAINER ID   IMAGE      COMMAND              CREATED         STATUS         PORTS                    NAMES
    1a755dd9ce59   influxdb   "/entrypoint.sh i…"  2 minutes ago   Up 2 minutes   0.0.0.0:8086->8086/tcp   influxdb
    
  • 访问InfluxDB的HTTP接口进行测试

    $ curl -G http://localhost:8086/query?pretty=true --data-urlencode "q=show databases"
    

你可以得到类似下面这串JSON

{
    "results": [
        {
            "statement_id": 0,
            "series": [
                {
                    "name": "databases",
                    "columns": [
                        "name"
                    ],
                    "values": [
                        [
                            "telegraf"
                        ],
                        [
                            "_internal"
                        ]
                    ]
                }
            ]
        }
    ]
}

安装Telegraf

Telegraf负责服务器端的数据采集,并将数据写入数据库中。它与InfluxDB都是属于InfluxData公司的,免费使用,并且同InfluxDB完美融合。Telegraf需要安装在被监控的主机上,可以上官网下载安装包。

  • 首先下载并安装Telegraf,我的Ubuntu环境采用deb包安装,CentOS可以用rpm包安装

    $ wget https://dl.influxdata.com/telegraf/releases/telegraf_1.13.4-1_amd64.deb
    $ sudo dpkg -i telegraf_1.13.4-1_amd64.deb
    
  • 安装完后telegraf会作为Linux的服务自动启动,可通过$ service telegraf status来查看状态

  • 打开”/etc/telegraf/telegraf.conf”,找到”[[outputs.influxdb]]“部分,将以下几行的注释去掉

[[outputs.influxdb]]
    # ...
    urls = ["http://127.0.0.1:8086"]  # 这里配置InfluxDB的地址
    # ...
    database = "telegraf"
    # ...
    skip_database_creation = false
    # ...
    timeout = "5s"
  • 多个主机的Telegraf服务可以指向同一InfluxDB数据库,采集的数据自动带有”host”主机名标签

  • 记得重启下telegraf服务$ sudo service telegraf restart

  • 你可以执行以下查询,看看数据有没有往InfluxDB里送

    $ curl -G http://localhost:8086/query?pretty=true --data-urlencode "db=telegraf" --data-urlencode "q=SELECT * FROM cpu"
    

数据太长,我就不贴出来了。

部署Grafana

Grafana是非常强大的监控数据可视化工具,而且开源。我见过各家平台对于数据采集和存储有各种不同的工具,但可视化基本上都用Grafana。

  • 我们依然采用Docker部署

    $ docker run -d -p 3000:3000 -v /home/user/grafana:/var/lib/grafana --name=grafana grafana/grafana
    

这里挂载的目录”/home/user/grafana”需要先创建,并给与777权限。

  • 部署完后,通过$ docker ps命令确认容器是否启动成功

  • 访问http://<yourserver>:3000,打开登录首页,默认用户名密码都为”admin”。首次登录会要求你改密码

  • 登录后,根据主页向导开始配置,首先添加数据源

Grafana Configure Steps

  • 选择InfluxDB做为数据源

Select DB

  • 按下图配置数据源,填写名称,地址,数据库名即可。默认安装的InfluxDB不需要用户名和密码。另外,这边要注意,因为我们是容器安装,所以数据库地址不能用”localhost”,必须是InfluxDB的容器地址

Config Datasource

  • 保存并测试,通过后点返回。然后进入下一步,创建仪表盘,我们选择新建一个查询

Add Query

  • 参考下图示例填上你的查询条件,可以添加多个查询条件

Edit Query

  • 点设置图标,填上图例名称,然后点右上角的保存,在弹出框填上仪表盘名称

Give Name

  • 保存成功后,你就可以看到下图这样的仪表盘了

Grafana Dashboard

我当前使用的Grafana版本是v6.7,不同版本的话,设置界面和流程会有些区别。

使用Docker Compose

这里有一个Docker Compose样例,可以直接用$ docker-compose up -d来启动Grafana和InfluxDB容器,这样就不用记住容器启动命令了。另外,Grafana容器里可以通过”influxdb”直接找到InfluxDB容器,也不用再去找IP地址了。

version: "3.1"

services:
  influxdb:
    container_name: influxdb
    image: influxdb
    restart: always
    ports:
      - "8086:8086"
    volumes:
      - ./influxdb:/var/lib/influxdb
    networks:
      - net-db

  grafana:
    container_name: grafana
    image: grafana/grafana
    restart: always
    ports:
      - "3000:3000"
    volumes:
      - ./grafana:/var/lib/grafana
    networks:
      - net-db
    links:
      - influxdb

networks:
  net-db: