docker-compose建立Grafana與Influxdb

系統:Ubuntu 16.04 LTS

#介紹

  • grafana 是一個開源數據分析和視覺化圖形套件,常用在視覺化基礎設施的性能資料和應用程式分析的時間序列資料。

  • influxdb 是一款專為時序性資料開發的高性能資料庫,使用GO語言開發且開源!不同的是可以直接對 influxdb 用 curl 新增刪除修改資料。

Installation

1
$ sudo apt-get update

用來取得遠端更新伺服器的套件檔案清單。

1
$ sudo apt-get upgrade

自動找出所有有新版的軟體套件並逐一升級。

1
$ sudo apt-get install docker.io

下載docker

1
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

下載docker-compose(用來定義容器之間的關係與容器啟動的順序)

1
$ sudo chmod +x /usr/local/bin/docker-compose

將剛剛下載的docker-compose的加上執行的權限

1
$ sudo mkdir -p /data/influxdb /data/grafana

新增資料夾,用來存在grafana與influxdb的資料(避免容器重啟後即消失)

1
$ sudo chmod 777 /data/grafana /data/influxdb

將資料夾權限開到所有帳號與服務皆可以寫入(不安全的做法,如可以的話請使用安全的權限寫入,如這邊無法寫入的話,容器將會因為啟動的時候要將資料寫入對應資料夾而失敗造成無線重試&無限重啟)

1
$ sudo vim docker-compose.yml

編寫docker-compose的檔案

docker-compose內容如下(下列隱私資料我有改過,所以需要依照自己的去修正):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
version: "3"
services:

influxdb:
image: influxdb
container_name: influxdb
ports:
- "8086:8086"
restart: always
volumes:
- /data/influxdb:/var/lib/influxdb
networks:
- monitor
grafana:
image: grafana/grafana
container_name: grafana
ports:
- "80:3000"
restart: always
networks:
- monitor
volumes:
- /data/grafana:/var/lib/grafana
environment:
- GF_SERVER_ROOT_URL=http://grafana.monitor.com
- GF_AUTH_DISABLE_LOGIN_FORM=false
- GF_AUTH_GOOGLE_ENABLED=true
- GF_AUTH_GOOGLE_CLIENT_ID=012345678912-testestest.apps.googleusercontent.com
- GF_AUTH_GOOGLE_CLIENT_SECRET=rhtsjyrkjytjkydtjyjdyj
- GF_AUTH_GOOGLE_ALLOWED_DOMAINS=grafana.com
- GF_AUTH_GOOGLE_ALLOW_SIGN_UP=true


networks:
monitor:
容器服務 Time
version docker-compose的版本
services 定義容器服務:influxdb與grafana
container_name 給予容器的名稱
ports 將外部主機對應至內部容器的Port設定
restart 容器在非正常的關閉或者停止下會被自動給重新啟動
volumes 容器可以持久化
networks 新增一個monitors的網路,將容器的網路指定至monitor名稱的區網路下
environment 設定grafana的設定檔環境變數

備註:記得docker-compose是有縮排的,容器與容器階級皆的縮牌要相同,同理服務與環境變數的設定是需要相同的空白段落,要注意否有對齊。

environment細部講解:

  • GF_SERVER_ROOT_URL

指定grafana網站的使用網域,有購買網域給該grafana服務使用的話可以利用此設定

  • GF_AUTH_DISABLE_LOGIN_FORM

輸入帳號密碼功能的顯示,如果需要輸入帳號密碼與google第三方驗證登入同時存在的話這邊設定false

  • GF_AUTH_GOOGLE_ENABLED

開啟google第三方登入驗證功能

  • GF_AUTH_GOOGLE_CLIENT_ID

google驗證客端的ID。可以至GCP上的API和憑證中的憑證後點選建立憑證→OAuth用戶端ID建立後或給予一組用戶端ID可以填寫在此。注意這邊需要先到OAuth同意畫面新增已授權網域並選擇公開

  • GF_AUTH_GOOGLE_CLIENT_SECRET

google驗證客端的密碼,同上在建立OAuth2.0用戶端ID的時候會同時給予密碼。

  • GF_AUTH_GOOGLE_ALLOWED_DOMAINS

允許認證的登入的網域,也就是說你需要設定什麼帳號的網域登入google成功後才可以轉導登入進grafana

  • GF_AUTH_GOOGLE_ALLOW_SIGN_UP

允許google驗證登入


docker-compose.yml檔案寫完之後存檔離開,準備要試著透過docker-compose啟動

1
$ sudo docker-compose up -d

檢查一下docker的容器狀況是否正常的啟動。
正常會出現像以下的容器STATUS的情況才對,告知你正常啟動的時間經過多久了

1
$ sudo docker ps -a


異常判斷1:docker-compose無法啟動成功
如果這時候發生無法啟動docker-compose的時候,一個可能是權限不足造成無法啟動
如果不是的話可能是檔案內容縮排或者設定有問題,可以先試著一個一個容器與設定拿掉後再試著啟動

異常判斷2:docker-compose無法執行
當下終端機的位置需要與docker-compose.yml所在的目錄位置是相同的,不然無法使用docker-compose的指令,因為當下的目錄無此docker-composeyml檔案所以無法執行


Acceptance

先開啟剛剛再docker-compose.yml所輸入的root url或者該機器的IP(防火牆記得開通設定80 Port)
就會出現該網站的登入畫面了

備註:如果有設定google網域登入驗證的話還是只能使用網域方式,否則轉導回網域的時候會失敗!!

先使用google帳號方式的登入後即可以看到內部Grafana的畫面了

###注意###
這邊使用google登入的方式進去會新增一個使用者且是權限最低的Viewer,導致你除了看什麼也無法做,因此後續需要登出使用預設最高管理者帳號進行權限調整

預設帳號 / 密碼 :admin / admin

登入後前往configuration→server Admin後將點選Grafana的google使用者帳號,將Permissions提升到Grafana Admin的權限

後續即可以正常的登出使用google帳號進行登出入了!!

之後再把docker-compose.yml檔案內的- GF_AUTH_DISABLE_LOGIN_FORM修改為true
重新將容器啟動!!就可以將帳號密碼的輸入功能顯示給關閉了

1
$ sudo docker-compose down
1
$ sudo docker-compose up -d