日常我们会有一些记录历史性能数据并进行分析观察的需求,一般简单地做法是通过日志记录下数据,然后整个文档(高级一点存到db里),后面自己通过工具来维护查看。
这里我们就来看一看如何通过grafana+influxdb来简单的实现这个需求(轻量级的elk)
influxdb技术实现上充分利用了Go语言的特性,无需任何外部依赖即可独立部署。应用mit协议开源,但其集群方案InfluxDB-Relay是商用的,所以如果要做线上采集分线,还是换别的靠谱data-source吧
grafana安装 Download Grafana | Grafana LabsOverview of how to download and install different versions of Grafana on different operating systems.https://grafana.com/grafana/download?platform=linux
sudo apt-get install -y adduser libfontconfig1
wget https://dl.grafana.com/enterprise/release/grafana-enterprise_8.3.3_amd64.deb
sudo dpkg -i grafana-enterprise_8.3.3_amd64.deb
influxdb安装
安装 · InfluxDB中文文档https://jasper-zhang1.gitbooks.io/influxdb/content/Introduction/installation.html
curl -sL https://repos.influxdata.com/influxdb.key | sudo apt-key add -
source /etc/os-release
sudo apt-get update && sudo apt-get install influxdb
sudo service influxdb start
* 我在安装时遇到一个无法启动进程的问题,可以参考 Installing InfluxDB as a service on Ubuntu without systemd
第一次访问前,需要先创建数据库
curl -i -XPOST http://localhost:8086/query --data-urlencode "q=CREATE DATABASE mydb"
可以使用http post的方式将数据存储到influxdb中
curl -i -XPOST
'http://10.246.47.160:8086/write?db=testDb' --data-binary 'cpu_load_short,host=server01,region=us-west value=0.64 1434055562000000000'
其中的postdata部分,参考下面一段网上的格式说明 measurement: 类似于mysql的 tablename tag: 用来分类的属性(自动加索引) field: 用来存储数据的属性(一直是数值型,没有索引)
measurement 和 filed(s) 之间 必需用空格分隔,如果有 tag(s) , tag 和 field 间必需空格分隔。measurement 和 tag,tag 和 tag 之间必行用一个逗号分隔,并且之间不能有空格。如果有 timestamp,field 和 timestamp 之间也必需用空格分隔。
合法的例子 ( value 和 otherval 是 field, foo 和 bat 是 tag )
measurement value=12
measurement value=12 1439587925
measurement,foo=bar value=12
measurement,foo=bar value=12 1439587925
measurement,foo=bar,bat=baz value=12,otherval=21 1439587925
不合法的
measurement,value=12
measurement value=12,1439587925
measurement foo=bar value=12
measurement,foo=bar,value=12 1439587925
measurement,foo=bar
measurement,foo=bar 1439587925
通过http的返回值判定是否成功写入
grafana已经绑定了数据源
如果希望直接查看和修改db中保存的数据,可以使用这个工具
https://github.com/CymaticLabs/InfluxDBStudio/releases/tag/v0.2.0-beta.1
功能比较简单,但能用!