您好,登錄后才能下訂單哦!
文件版本: | V1.0 | 文件編號: | R&D0031 |
發布日期: | 編 制: | ||
審 批: |
Influxdb relay + grafana服務器
目錄
1.簡介3
1.1 特點4
1.2 influxdb比較4
1.3 用途4
2.系統部署基礎4
2.1 安裝4
2.2 啟動5
2.3 web界面展示5
2.3.1 無驗證web登錄5
2.3.2 驗證web登錄6
2.4 帶密碼登錄終端7
2.5 數據庫常規操作8
2.5.1 數據庫增8
2.5.2 數據庫刪除與修改8
2.5.3 數據庫查詢8
2.5.4 數據庫增與表操作9
2.5.5 數據庫保存策略(Retention Policies)10
2.5.6 數據庫連續查詢10
2.5.7 數據庫用戶管理10
3. 數據展示工具11
3.1 grafana介紹11
3.1 grafana安裝,運行,啟動11
3.2 grafana訪問11
3.3創建Dashbord13
4. IfluxDB Relay13
4.1 簡介13
4.2 拓撲介紹13
4.3 源碼包安裝測試14
4.4 influxdb-relay啟動15
4.5 influxdb-relay數據寫入同步16
4.6 influxdb-relay節點故障數據寫入同步17
5. FAQ18
修訂記錄
版本號 | 發布日期 | 擬制人 | 修訂描述 |
V1.0 | 2017-01-17 | 首次發布 | |
V1.1 | 2017-02-14 | 新增賬號和密碼 | |
influxdb服務器
InfluxDB用Go語言編寫的一個開源分布式時序、事件和指標數據庫,和傳統是數據庫相比有不少不同的地方。類似的數據庫有Elasticsearch、Graphite等。
1.提供了Http接口的API來操作數據
2.提供了類似sql的數據庫語句
3.基于時間序列,支持與時間有關的相關函數(如最大,最小,求和等)
4.可度量性:你可以實時對大量數據進行計算
5.基于事件:它支持任意的事件數據
6.無結構(無模式):可以是任意數量的列
7.可拓展的支持min, max, sum, count, mean, median 等一系列函數,方便統計
8.原生的HTTP支持,內置HTTP API
9.強大的類SQL語法
10.自帶管理界面,方便使用
庫、表等比較:
influxDB | 傳統數據庫中的概念 |
database | 數據庫 |
measurement | 數據庫中的表 |
points | 表里面的一行數據 |
influxdb數據的構成:
Point由時間戳(time)、數據(field)、標簽(tags)組成。
Point屬性 | 傳統數據庫中的概念 |
time | 每個數據記錄時間,是數據庫中的主索引(會自動生成) |
fields | 各種記錄值(沒有索引的屬性)也就是記錄的值:溫度, 濕度 |
tags | 各種有索引的屬性:地區,海拔 |
這里不得不提另一個名詞:series:
所有在數據庫中的數據,都需要通過圖表來展示,而這個series表示這個表里面的數據,可以在圖表上畫成幾條線:通過tags排列組合算出來。具體可以通過SHOW SERIES FROM "表名" 進行查詢。
一般用來儲存實時數據,配合一套UI界面來展示信息。
基本環境,準備。
root@ubuntu:~# ls
grafana_4.1.1-1484211277_amd64.deb influxdb_1.1.1_amd64.deb
root@ubuntu:~# cat /etc/issue
Ubuntu 14.04.5 LTS \n \l
root@ubuntu:~# uname -a
Linux ubuntu 3.16.0-30-generic #40~14.04.1-Ubuntu SMP Thu Jan 15 17:43:14 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
開始安裝
root@ubuntu:~# dpkg -i influxdb_1.1.1_amd64.deb
Selecting previously unselected package influxdb.
(Reading database ... 90134 files and directories currently installed.)
Preparing to unpack influxdb_1.1.1_amd64.deb ...
Unpacking influxdb (1.1.1-1) ...
Setting up influxdb (1.1.1-1) ...
Adding system startup for /etc/init.d/influxdb ...
/etc/rc0.d/K20influxdb -> ../init.d/influxdb
/etc/rc1.d/K20influxdb -> ../init.d/influxdb
/etc/rc6.d/K20influxdb -> ../init.d/influxdb
/etc/rc2.d/S20influxdb -> ../init.d/influxdb
/etc/rc3.d/S20influxdb -> ../init.d/influxdb
/etc/rc4.d/S20influxdb -> ../init.d/influxdb
/etc/rc5.d/S20influxdb -> ../init.d/influxdb
Processing triggers for man-db (2.6.7.1-1ubuntu1) ...
root@ubuntu:~# /etc/init.d/influxdb start
Starting the process influxdb [ OK ]
influxdb process was started [ OK ]
root@ubuntu:~# netstat -lnp|grep influ
tcp6 0 0 :::8083 :::* LISTEN 5057/influxd
tcp6 0 0 :::8086 :::* LISTEN 5057/influxd
tcp6 0 0 :::8088 :::* LISTEN 5057/influxd
8083 web管理端 http://ip:8083 用戶名和密碼都是admin, InfluxDB 的 Web 管理界面端口是 8083
8086 HTTP API 監聽端口是 8086
8088 集群端口(目前還不是很清楚, 配置在全局的bind-address,默認不配置就是開啟的)
啟動成功之后,我們就可以開始使用influxdb啦!
root@ubuntu:~# which influx
/usr/bin/influx
root@ubuntu:~# influx
Visit https://enterprise.influxdata.com to register for updates, InfluxDB server management, and monitoring.
Connected to http://localhost:8086 version 0.13.0
InfluxDB shell version: 0.13.0
>
> show databases
name: databases
name
----
_internal
> CREATE DATABASE "testDB" #創建數據庫
> show databases #創建數據庫
name: databases
name
----
_internal
testDB
> use testDB #使用testDB數據庫類mysql
Using database testDB
Web界面訪問http://ip:8083,
注意:新版本默認是關閉該web展示,詳見后面FAQ具體解決方法:
通過界面操作命令。
1. 先添加用戶
設置TS的authorized,提高安全性,針對指定用戶擁有權限才能訪問數據庫的數據,TS默認用戶分為普通用戶和管理員用戶,權限分為read,write,all privileges三種權限
root@ubuntu:/home/leco# influx
Visit https://enterprise.influxdata.com to register for updates, InfluxDB server management, and monitoring.
Connected to http://localhost:8086 version 1.1.1
InfluxDB shell version: 1.1.1
> CREATE USER "influxdb" WITH PASSWORD 'influxdb' WITH ALL PRIVILEGES
先添加賬號和密碼,均為influxdb
Web界面數據庫的切換。此時登錄web的時候需要輸入賬號和密碼,驗證通過后才可以正常進入。配置如下:
2. 重啟influxdb
root@ubuntu:~# /etc/init.d/influxdb restart
Stopping influxdb...
influxdb process was stopped [ OK ]
Starting influxdb...
influxdb process was started [ OK ]
通過界面上輸入正確的IP,端口,用戶名和密碼點擊save進入。
若是設置了密碼驗證的話必須就要輸入賬號和密碼才能正常登錄操作,否則報錯如下
1. 錯誤登錄
root@ubuntu:/home/leco# influx
Visit https://enterprise.influxdata.com to register for updates, InfluxDB server management, and monitoring.
Connected to http://localhost:8086 version 1.1.1
InfluxDB shell version: 1.1.1
> show databases;
ERR: unable to parse authentication credentials #說明已經添加了驗證方式
Warning: It is possible this error is due to not setting a database.
Please set a database with the command "use <database>".
> quit
2. 正確登錄
root@ubuntu:/home/leco# influx -host 'localhost' -port '8086' -username 'influxdb' -password 'influxdb'
Visit https://enterprise.influxdata.com to register for updates, InfluxDB server management, and monitoring.
Connected to http://localhost:8086 version 1.1.1
InfluxDB shell version: 1.1.1
> show databases;
name: databases
name
----
_internal
cmz
#此時localhost是連接本機,若是遠程連接就換成對應的IP。Port是influxdb默認端口8086,username 和password就是授權的賬號和密碼。
> use testDB
Using database testDB
> insert weather,altitude=1000,area=北 temperature=11,humidity=-4
或者通過HTTP接口增加
curl -i -XPOST 'http://localhost:8086/write?db=testDB' --data-binary 'weather,altitude=1000,area=北 temperature=11,humidity=-4'
Line Protocol格式
插入數據的格式似乎比較奇怪,這是因為influxDB儲存數據所采用的是Line Protocol格式。
在上面兩個插入數據的方法中,都有一樣的部分。
weather,altitude=1000,area=北 temperature=11,humidity=-4
其中:
1. weather : 表名
2. altitude=1000,area=北 : tag
3. temperature=11,humidity=-4 :field
參考官方文檔:
https://docs.influxdata.com/influxdb/v0.10/write_protocols/line/
> use testDB
Using database testDB
> SELECT * FROM weather ORDER BY time
name: weather
timealtitudeareahumiditytemperature
-----------------------------------
14850746132673340411000北-411
通過Http接口
curl -G 'http://localhost:8086/query?pretty=true' --data-urlencode "db=testDB" --data-urlencode "q=SELECT * FROM weather ORDER BY time DESC LIMIT 3"
InfluxDB是支持類SQL語句的,具體的查詢語法都差不多,就不再詳細描述了。詳見官方文檔
#創建數據庫,庫名為db_name
> CREATE DATABASE "db_name"
#顯示所有數據庫
> SHOW DATABASES
name: databases
name
----
_internal
testDB
db_name
#刪除庫名字為db_name的庫
> DROP DATABASE "db_name"
#切換到testDB數據庫
> USE testDB
Using database testDB
#顯示該數據庫中的表
> SHOW MEASUREMENTS
name: measurements
name
----
weather
#創建表
#直接在插入數據的時候指定表名字(weather就是表名)
> insert weather,altitude=1000,area=北 temperature=11,humidity=-4
#刪除weather表
> DROP MEASUREMENT "weather"
InfluxDB沒有提供直接刪除Points的方法,但是它提供了Retention Policies。主要用于指定數據的保留時間:當數據超過了指定的時間之后,就會被刪除。
#1.查看當前數據庫的Retention Policies
> SHOW RETENTION POLICIES ON "testDB"
namedurationshardGroupDurationreplicaNdefault
---------------------------------------------
autogen0s168h0m0s1true
#2.創建新的Retention Policies
> CREATE RETENTION POLICY "rp_name" ON "testDB" DURATION 30d REPLICATION 1 DEFAULT
說明:
1. rp_name:策略名
2. testDB:具體的數據庫名
3. 30d:保存30天,30天之前的數據將被刪除
它具有各種時間參數,比如:h(小時),w(星期)
4. REPLICATION 1:副本個數,這里填1就可以了
5. DEFAULT 設為默認的策略
#2.修改Retention Policies
> ALTER RETENTION POLICY "rp_name" ON "testDB" DURATION 3w DEFAULT
#3.刪除Retention Policies
> DROP RETENTION POLICY "rp_name" ON "testDB"
當數據超過保存策略里指定的時間之后,就會被刪除。如果我們不想完全刪除掉,比如做一個數據統計采樣:把原先每秒的數據,存為每小時的數據,讓數據占用的空間大大減少(以降低精度為代價)。這就需要InfluxDB提供的:連續查詢(Continuous Queries)。
#1.當前數據庫的continus Queries
> SHOW CONTINUOUS QUERIES
name: _internal
namequery
---------
name: testDB
namequery
---------
#2.創建新的continus Queries
#顯示用戶
> SHOW USERS
useradmin
---------
#創建用戶
> CREATE USER "realcloud" WITH PASSWORD '123456'
#創建管理員權限的用戶
> CREATE USER "cmz" WITH PASSWORD 'cmz' WITH ALL PRIVILEGES
#刪除用戶
> DROP USER "cmz"
數據最終是需要一套UI來展示的,而這種實時數據的展示,已經有不少項目了。 比如:
1. 官方的Chronograf
2. Grafana
3. 其它...
此時我選擇的使用Grafana
root@ubuntu:~# ls
grafana_4.1.1-1484211277_amd64.deb influxdb_1.1.1_amd64.deb
#安裝
root@ubuntu:~# dpkg -i grafana_4.1.1-1484211277_amd64.deb
Selecting previously unselected package grafana.
(Reading database ... 61968 files and directories currently installed.)
Preparing to unpack grafana_4.1.1-1484211277_amd64.deb ...
Unpacking grafana (4.1.1-1484211277) ...
Setting up grafana (4.1.1-1484211277) ...
Adding system user `grafana' (UID 106) ...
Adding new user `grafana' (UID 106) with group `grafana' ...
Not creating home directory `/usr/share/grafana'.
### NOT starting grafana-server by default on bootup, please execute
sudo update-rc.d grafana-server defaults 95 10
### In order to start grafana-server, execute
sudo service grafana-server start
Processing triggers for ureadahead (0.100.0-16) ...
ureadahead will be reprofiled on next reboot
#啟動
root@ubuntu:~# /etc/init.d/grafana-server start
* Starting Grafana Server [ OK ]
安裝步驟參考:http://grafana.org/download/
1) Web登錄,直接訪問:http://your_ip:3000
默認帳號:admin
默認密碼:admin
2) 在Data Sources中添加數據庫testDB
其中user和password,如果沒有設置過,可以隨便填下。
保存之后,可以通過Test Connection來測試,是否填寫正確。
點擊New按鈕就可以了。
該項目為influxdb添加了一個基本的高可用性層。通過正確的體系結構和災難恢復過程,實現了高度可用的設置。
提示: influxdb-relay must be built with Go 1.5+
參考鏈接:
https://github.com/influxdata/influxdb-relay/blob/master/README.md
體系結構相當簡單,包括負載平衡器、兩個或多個influxdb中繼進程和兩個或多個influxdb進程。負載平衡器應使用路徑/寫入將UDP通信和http post請求指向兩個繼電器,同時將路徑/查詢指向兩個influxdb服務器。安裝程序應該如下:
給我的感覺,這個 influxdb-relay是一個數據庫中間件的角色,起到了一個代理的作用
1.實驗環境
IP | 系統環境 | 安裝軟件 | |
192.168.5.200 | Ubuntu14.04 x64 | influxdb | influxdb-relay |
192.168.5.202 | Ubuntu14.04 x64 | influxdb |
此時上文只在200機器上安裝了influxdb,此時要在202上也要安裝influxdb。也可以只安裝在一個機器上,我分開安裝了,更貼切實際生產情況。
2. 安裝golang環境
influxdb release的deb包本身是已經編譯好的,并不需要golang的環境。而influxdb-relay目前還只是存放在github上,因此需要先安裝golang環境。 手動下載更高版本的golang是需要的。
3. 下載并解壓1.6.2版本的golang壓縮包
root@ubuntu:~# apt-get install git
root@ubuntu:~# wget http://www.golangtc.com/static/go/1.6.2/go1.6.2.linux-amd64.tar.gz
root@ubuntu:~# ls go1.6.2.linux-amd64.tar.gz
go1.6.2.linux-amd64.tar.gz
root@ubuntu:~# tar -zxf go1.6.2.linux-amd64.tar.gz -C /usr/local/
4. 配置環境變量
root@ubuntu:~# tail -9 /etc/profile
#add by caimengzhi at 2017-01-23 for go. start
export GOROOT=/usr/local/go
export GOBIN=$GOROOT/bin
export GOPKG=$GOROOT/pkg/tool/linux_amd64
export GOARCH=amd64
export GOOS=linux
export GOPATH=$HOME
export PATH=$PATH:$GOBIN:$GOPKG:$GOPATH/bin
#add by caimengzhi at 2017-01-23 for go. End
root@ubuntu:~# source /etc/profile
root@ubuntu:~# go version
go version go1.6.2 linux/amd64
root@ubuntu:~# GOPATH=/root/go
root@ubuntu:~# go get github.com/influxdata/influxdb-relay
root@ubuntu:~# ls
go go1.6.2.linux-amd64.tar.gz grafana_4.1.1-1484211277_amd64.deb influxdb_1.1.1_amd64.deb src
#此時會在/root下發現go文件
root@ubuntu:~# cp $GOPATH/src/github.com/influxdata/influxdb-relay/sample.toml ./relay.toml
root@ubuntu:~# vim relay.toml
-bash: /root/go/bin/influxdb-relay: No such file or directory
root@ubuntu:~# which influxdb-relay
/usr/local/go/bin/influxdb-relay
5. 配置文件解釋
root@ubuntu:~# cat relay.toml
`http`
name = "example-http"
bind-addr = "192.168.5.200:9096"
output = [
{ name="local1", location = "http://192.168.5.200:8086/write" },
{ name="local2", location = "http://192.168.5.202:8086/write" },
]
`udp`
name = "example-udp"
bind-addr = "192.168.5.200:9096"
read-buffer = 0 # default
output = [
{ name="local1", location="192.168.5.200:8089", mtu=512 },
{ name="local2", location="192.168.5.202:8089", mtu=1024 },
]
root@ubuntu:~# /usr/local/go/bin/influxdb-relay -config relay.toml >/tmp/influxdb_relay.log 2>/dev/null &
[1] 10943
再指定之前influxdb-relay配置的端口9096,成功進入其他的influxdb
root@ubuntu:~# influx -port 9096
Visit https://enterprise.influxdata.com to register for updates, InfluxDB server management, and monitoring.
Connected to http://localhost:9096 version relay
InfluxDB shell version: 1.1.1
驗證可以通過influxdb-relay寫數據
root@ubuntu:~#
curl -i -XPOST 'http://localhost:9096/write?db=testDB' --data-binary 'cpu_load_short,host=server01,region=us-west value=0.64 1434055562000000000'
2017/01/23 17:53:43 Problem posting to relay "example-http" backend "local2": Post http://127.0.0.1:7086/write?db=testDB: dial tcp 127.0.0.1:7086: getsockopt: connection refused
HTTP/1.1 204 No Content
Date: Mon, 23 Jan 2017 09:53:43 GMT
1. 進入節點1,influxdb驗證數據寫入
root@ubuntu:~# influx
Visit https://enterprise.influxdata.com to register for updates, InfluxDB server management, and monitoring.
Connected to http://localhost:8086 version 1.1.1
InfluxDB shell version: 1.1.1
> use testDB
Using database testDB
> select * from cpu_load_short
name: cpu_load_short
timehostregionvalue
-------------------
1434055562000000000server01us-west0.64
2. 進入節點2,influxdb驗證數據寫入
> use testDB;
Using database testDB
> select * from cpu_load_short
name: cpu_load_short
timehostregionvalue
-------------------
1434055562000000000server01us-west0.64
從上可以看出通過調用relay的端口9096.寫入數據,兩個節點都會有相對數據寫入。
注意點:
### 缺陷,不知道是不是坑,反正在官網的github上沒看到這個注意點
# 手動在所有節點上創建數據庫
write操作并不包含創建數據庫,所以需要手動在所有節點上提前創建數據庫
# 故障節點操作
1.停止節點1的influxdb
root@loocha15:~# /etc/init.d/influxdb stop
Stopping influxdb...
influxdb process was stopped [ OK ]
2.此時繼續寫入數據
curl -i -XPOST 'http://localhost:9096/write?db=cmz' --data-binary 'cpu_load_short,host=beijing,region=east value=2 2222222222'
2017/02/06 15:19:26 Problem posting to relay "example-http" backend "local1": Post http://192.168.3.35:8086/write?db=cmz: dial tcp 192.168.3.35:8086: getsockopt: connection refused
HTTP/1.1 204 No Content
Date: Mon, 06 Feb 2017 07:19:26 GMT
3.節點2 驗證數據
> use cmz;
Using database cmz
> select * from cpu_load_short
name: cpu_load_short
timehostregionvalue
-------------------
1111111111nanjingeast123
2222222222beijingeast2 #這一條就是節點1故障后,寫入的數據
1434055562000000000server01us-west0.64
到此截止influxdb的HA已經測試完畢。
1. WEB顯示404
root@ubuntu:~# curl localhost:8086 -I
HTTP/1.1 404 Not Found
Content-Type: text/plain; charset=utf-8
X-Content-Type-Options: nosniff
X-Influxdb-Version: 1.1.1
Date: Sun, 22 Jan 2017 09:36:48 GMT
Content-Length: 19
Influxdb新版本web界面不展示解決方法
1.新安裝influxdb web界面不展示
訪問的時候404.
解決方法:
一、問題原因
InfluxDB在0.13版本以后,就默認關閉了web管理頁面,而國內的文檔大多都以舊版的InfluxDB為標準寫的,所以下載安裝好最新版本以后,就會出現8083端口的web管理頁面訪問不了的問題。
二、解決方案
新版的InfluxDB雖然默認關閉了web管理頁面,但我們可以通過很簡單的方式進行開啟。
打開配置文件,vim /etc/influxdb/influxdb.conf 找到如下幾行:
修改后如下:
重啟服務
root@ubuntu:~# /etc/init.d/influxdb restart
influxdb process already stopped [ OK ]
Starting influxdb...
influxdb process was started [ OK ]
查看端口號8083(之前是沒有的)
root@ubuntu:~# netstat -lnp|grep influ
tcp6 0 0 :::8083 :::* LISTEN 5057/influxd
tcp6 0 0 :::8086 :::* LISTEN 5057/influxd
tcp6 0 0 :::8088 :::* LISTEN 5057/influxd
Web界面訪問展示:
http://ip:8083
OK.
2. command
root@ubuntu:~# go get -u github.com/influxdata/influxdb-relay
go: missing Git command. See https://golang.org/s/gogetcmd
package github.com/influxdata/influxdb-relay: exec: "git": executable file not found in $PATH
解決:
root@ubuntu:~# apt-get install git
3.relay命令行管理不了
root@ubuntu:~# !net
netstat -lnp|grep 9096
tcp 0 0 127.0.0.1:9096 0.0.0.0:* LISTEN 3502/influxdb-relay
udp 0 0 127.0.0.1:9096 0.0.0.0:* 3502/influxdb-relay
root@ubuntu:~# influx -port 9096
Visit https://enterprise.influxdata.com to register for updates, InfluxDB server management, and monitoring.
Connected to http://localhost:9096 version relay
InfluxDB shell version: 1.1.1
> show database;
ERR: invalid write endpoint
Warning: It is possible this error is due to not setting a database.
Please set a database with the command "use <database>".
http://dbspace.blog.51cto.com/6873717/1881705
http://grafana.org/features/
https://www.influxdata.com/
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。