Grafana 的安裝使用

grafana 是一個(gè)可視化面板塘秦,有著非常漂亮的圖表和布局展示定踱,功能齊全的度量?jī)x表盤和圖形編輯器才避,支持 Graphite橱夭、zabbix、InfluxDB桑逝、Prometheus棘劣、OpenTSDB、Elasticsearch 等作為數(shù)據(jù)源楞遏,比 Prometheus 自帶的圖表展示功能強(qiáng)大太多茬暇,更加靈活,有豐富的插件寡喝,功能更加強(qiáng)大糙俗。

接下來就來直接安裝,同樣的预鬓,將 grafana 安裝到 Kubernetes 集群中巧骚,第一步同樣是去查看 grafana 的 docker 鏡像的介紹,可以在 dockerhub 上去搜索,也可以在官網(wǎng)去查看相關(guān)資料劈彪,鏡像地址如下:https://hub.docker.com/r/grafana/grafana/
但是還有一個(gè)需要注意的是 Changelog 中v5.1.0版本的更新介紹:

Major restructuring of the container
Usage of chown removed
File permissions incompatibility with previous versions
user id changed from 104 to 472
group id changed from 107 to 472
Runs as the grafana user by default (instead of root)
All default volumes removed
特別需要注意第3條竣蹦,userid 和 groupid 都有所變化,所以我們?cè)谶\(yùn)行的容器的時(shí)候需要注意這個(gè)變化〔着現(xiàn)在我們將這個(gè)容器轉(zhuǎn)化成 Kubernetes 中的 Pod:(grafana-statefulset.yaml)痘括,通過statefulset方式部署。

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: grafana
  namespace: kube-system
spec:
  serviceName: "grafana"
  replicas: 1
  selector:
    matchLabels:
      app: grafana
  template:
    metadata:
      labels:
        app: grafana
    spec:
      containers:
      - image: grafana/grafana:5.3.4
        name: grafana
        imagePullPolicy: IfNotPresent
        ports:
          - containerPort: 3000
            protocol: TCP
        env:
        - name: GF_SECURITY_ADMIN_USER
          value: admin
        - name: GF_SECURITY_ADMIN_PASSWORD
          value: adminqed
        readinessProbe:
          failureThreshold: 10
          httpGet:
            path: /api/health
            port: 3000
            scheme: HTTP
          initialDelaySeconds: 60
          periodSeconds: 10
          successThreshold: 1
          timeoutSeconds: 30
        livenessProbe:
          failureThreshold: 3
          httpGet:
            path: /api/health
            port: 3000
            scheme: HTTP
          periodSeconds: 10
          successThreshold: 1
          timeoutSeconds: 1
        resources:
          limits:
            cpu: 300m
            memory: 300Mi
          requests:
            cpu: 300m
            memory: 300Mi
        volumeMounts:
          - name: grafana-data
            mountPath: /var/lib/grafana
            subPath: grafana
      securityContext:
        fsGroup: 472
        runAsUser: 472
  volumeClaimTemplates:
  - metadata:
      name: grafana-data
    spec:
      storageClassName: course-nfs-storage
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: "10Gi"  

---

apiVersion: v1
kind: Service
metadata:
  name: grafana
  namespace: kube-system
spec:
  type: NodePort
  ports:
  - port: 80
    targetPort: 3000
    nodePort: 31111
  selector:
    app: grafana 

這里使用了最新的鏡像grafana/grafana:5.3.4滔吠,然后添加了監(jiān)控檢查纲菌、資源聲明,另外兩個(gè)比較重要的環(huán)境變量GF_SECURITY_ADMIN_USER和GF_SECURITY_ADMIN_PASSWORD疮绷,用來配置 grafana 的管理員用戶和密碼的翰舌,由于 grafana 將 dashboard、插件這些數(shù)據(jù)保存在/var/lib/grafana這個(gè)目錄下面的冬骚,所以這里如果需要做數(shù)據(jù)持久化的話灶芝,就需要針對(duì)這個(gè)目錄進(jìn)行 volume 掛載聲明,這里使用storageclass唉韭,由于上面剛剛提到的 Changelog 中 grafana 的 userid 和 groupid 有所變化,所以這里需要增加一個(gè)securityContext的聲明來進(jìn)行聲明犯犁。
注:如securityContext聲明時(shí)有問題属愤,請(qǐng)檢查kube-apiserver配置是否禁用了securityContext。

[root@laxidc-cmp-master01 grafana]# kubectl get svc -n kube-system
NAME                      TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                       AGE
grafana                   NodePort    10.254.175.109   <none>        80:31111/TCP                  2d

可以在瀏覽器中使用http://<node VIP:31111>來訪問 grafana 這個(gè)服務(wù)了:


image.png

配置

在上面的首頁中可以看到已經(jīng)安裝了 Grafana酸役,接下來點(diǎn)擊Add data source進(jìn)入添加數(shù)據(jù)源界面住诸。

數(shù)據(jù)源

這個(gè)地方配置的數(shù)據(jù)源是 Prometheus,所以選擇這個(gè) Type 即可涣澡,給改數(shù)據(jù)源添加一個(gè) name:prometheus-ds贱呐,最主要的是下面HTTP區(qū)域是配置數(shù)據(jù)源的訪問模式。

訪問模式是用來控制如何處理對(duì)數(shù)據(jù)源的請(qǐng)求的:

  • 服務(wù)器(Server)訪問模式(默認(rèn)):所有請(qǐng)求都將從瀏覽器發(fā)送到 Grafana 后端的服務(wù)器入桂,后者又將請(qǐng)求轉(zhuǎn)發(fā)到數(shù)據(jù)源奄薇,通過這種方式可以避免一些跨域問題,其實(shí)就是在 Grafana 后端做了一次轉(zhuǎn)發(fā)抗愁,需要從Grafana 后端服務(wù)器訪問該 URL馁蒂。
  • 瀏覽器(Browser)訪問模式:所有請(qǐng)求都將從瀏覽器直接發(fā)送到數(shù)據(jù)源,但是有可能會(huì)有一些跨域的限制蜘腌,使用此訪問模式沫屡,需要從瀏覽器直接訪問該 URL。

由于我們這個(gè)地方 Prometheus 通過 NodePort 的方式的對(duì)外暴露的服務(wù)撮珠,所以我們這個(gè)地方是不是可以使用瀏覽器訪問模式直接訪問 Prometheus 的外網(wǎng)地址沮脖,但是這種方式顯然不是最好的,相當(dāng)于走的是外網(wǎng),而我們這里 Prometheus 和 Grafana 都處于 kube-system 這同一個(gè) namespace 下面勺届,是不是在集群內(nèi)部直接通過 DNS 的形式就可以訪問了驶俊,而且還都是走的內(nèi)網(wǎng)流量,所以我們這里用服務(wù)器訪問模式顯然更好涮因,數(shù)據(jù)源地址:http://prometheus:9090(因?yàn)樵谕粋€(gè) namespace 下面所以直接用 Service 名也可以)废睦,然后其他的配置信息就根據(jù)實(shí)際情況了,比如 Auth 認(rèn)證养泡,我們這里沒有嗜湃,所以跳過即可,點(diǎn)擊最下方的Save & Test提示成功證明我們的數(shù)據(jù)源配置正確:

grafana datasource

數(shù)據(jù)源添加完成后澜掩,就可以來添加 Dashboard 了购披。

Dashboard

同樣,切換到主頁肩榕,我們可以根據(jù)自己的需求手動(dòng)新建一個(gè) Dashboard刚陡,除此之外,grafana 的官方網(wǎng)站上還有很多公共的 Dashboard 可以供我們使用株汉,我們這里可以使用Kubernetes cluster monitoring (via Prometheus)(dashboard id 為162)這個(gè) Dashboard 來展示 Kubernetes 集群的監(jiān)控信息筐乳,在左側(cè)側(cè)邊欄 Create 中點(diǎn)擊import導(dǎo)入:

grafana import

我們可以將上面編號(hào)162的 dashboard 下載到本地,然后這里重新上傳即可乔妈,也可以在上面的文本框中直接輸入162編號(hào)回車即可蝙云,導(dǎo)入這個(gè) dashboard:

grafana import2

需要注意的是在執(zhí)行上面的 import 之前要記得選擇prometheus-ds這個(gè)名字的數(shù)據(jù)源,執(zhí)行import操作路召,就可以進(jìn)入到 dashboard 頁面:

grafana k8s cluster monitor

可以看到 dashboard 頁面上出現(xiàn)了很多漂亮的圖表勃刨,但是看上去數(shù)據(jù)不正常,這是因?yàn)檫@個(gè) dashboard 里面需要的數(shù)據(jù)指標(biāo)名稱和我們 Prometheus 里面采集到的數(shù)據(jù)指標(biāo)不一致造成的股淡,比如身隐,第一個(gè)Cluster memory usage(集群內(nèi)存使用情況),我們可以點(diǎn)擊標(biāo)題 -> Edit唯灵,進(jìn)入編輯這個(gè)圖表的編輯頁面:

grafana dashboard edit

進(jìn)入編輯頁面我們就可以看到這個(gè)圖表的查詢語句:

(sum(node_memory_MemTotal) - sum(node_memory_MemFree+node_memory_Buffers+node_memory_Cached) ) / sum(node_memory_MemTotal) * 100

grafana dashboard edit2

這就是我們之前在 Prometheus 里面查詢的promQL語句贾铝,我們可以將上面的查詢語句復(fù)制到 Prometheus 的 Graph 頁面進(jìn)行查詢,其實(shí)可以預(yù)想到是沒有對(duì)應(yīng)的數(shù)據(jù)的埠帕,因?yàn)槲覀冇?code>node_exporter采集到的數(shù)據(jù)指標(biāo)不是node_memory_MemTotal關(guān)鍵字忌傻,而是node_memory_MemTotal_bytes,將上面的promQL語句做相應(yīng)的更改:

(sum(node_memory_MemTotal_bytes) - sum(node_memory_MemFree_bytes + node_memory_Buffers_bytes+node_memory_Cached_bytes)) / sum(node_memory_MemTotal_bytes) * 100

這個(gè)語句的意思就是(整個(gè)集群的內(nèi)存-(整個(gè)集群剩余的內(nèi)存以及Buffer和Cached))/整個(gè)集群的內(nèi)存搞监,簡(jiǎn)單來說就是總的集群內(nèi)存使用百分比水孩。將上面 grafana 的promQL語句替換掉,就可以看到圖表正常了:

grafana table

同樣的琐驴,可以更改后面的 CPU 和 FileSystem 的使用率:
grafana cluster table

同樣下面的Pod CPU Usage用來展示 Pod CPU 的使用情況俘种,對(duì)應(yīng)的promQL語句如下秤标,根據(jù) pod_name 來進(jìn)行統(tǒng)計(jì):

sum by (pod_name)(rate(container_cpu_usage_seconds_total{image!="", pod_name!=""}[1m]))

按照上面的方法替換 grafana 中的 dashboard 圖表中的查詢語句:
grafana cpu usage

其他的也按照我們的實(shí)際需求重新編輯下就可以,下圖是最終整個(gè) dashboard 的效果圖:
grafana k8s cluster dashboard

最后要記得保存這個(gè) dashboard宙刘,下面的鏈接是我修改后的 dashboard json 文件地址苍姜,你可以直接下載下來導(dǎo)入到 grafana 當(dāng)中续扔,當(dāng)然你也可以根據(jù)實(shí)際情況進(jìn)行相應(yīng)的更改:k8s-cluster-grafana-dashboard.json彩掐。

除此之外,也可以前往 grafana dashboard 的頁面去搜索其他的關(guān)于 Kubernetes 的監(jiān)控頁面哑芹,地址:https://grafana.com/dashboards布近。
比如監(jiān)控pod的id 為747的dashboard
比如監(jiān)控DeployMent的id 為741的dashboard
比如監(jiān)控Nod的id 為9276的dashboard

插件

上面是最常用的 grafana 當(dāng)中的 dashboard 的功能的使用垫释,然后我們也可以來進(jìn)行一些其他的系統(tǒng)管理,比如添加用戶撑瞧,為用戶添加權(quán)限等等棵譬,也可以安裝一些其他插件,比如 grafana 就有一個(gè)專門針對(duì) Kubernetes 集群監(jiān)控的插件:grafana-kubernetes-app

要安裝這個(gè)插件预伺,需要到 grafana 的 Pod 里面去執(zhí)行安裝命令:

$ kubectl get pods -n kube-system
NAME                          READY     STATUS      RESTARTS   AGE
grafana-79477fbb7c-v4prs      1/1       Running     0          23m
$ kubectl exec -it grafana-79477fbb7c-v4prs /bin/bash -n kube-system
grafana@grafana-79477fbb7c-v4prs:/usr/share/grafana$ grafana-cli plugins install grafana-kubernetes-app
installing grafana-kubernetes-app @ 1.0.1
from url: https://grafana.com/api/plugins/grafana-kubernetes-app/versions/1.0.1/download
into: /var/lib/grafana/plugins

? Installed grafana-kubernetes-app successfully

Restart grafana after installing plugins . <service grafana-server restart>

grafana@grafana-79477fbb7c-v4prs:/usr/share/grafana$

安裝完成后需要重啟 grafana 才會(huì)生效订咸,這里直接刪除 Pod,重建即可酬诀,然后回到 grafana 頁面中脏嚷,切換到 plugins 頁面可以發(fā)現(xiàn)下面多了一個(gè) Kubernetes 的插件,點(diǎn)擊進(jìn)來啟用即可瞒御,然后點(diǎn)擊Next up旁邊的鏈接配置集群

可以添加一個(gè)新的 Kubernetes 集群然眼,這里需要填寫集群的訪問地址:https://kubernetes.default,然后比較重要的是集群訪問的證書葵腹,勾選上TLS Client AuthWith CA Cert這兩項(xiàng)。

image.png

集群訪問的證書文件屿岂,用我們?cè)L問集群的 kubectl 的配置文件中的證書信息(~/.kube/config)即可践宴,其中屬性certificate-authority-dataclient-certificate-data爷怀、client-key-data就對(duì)應(yīng)這 CA 證書阻肩、Client 證書、Client 私鑰运授,不過 config 文件里面的內(nèi)容是base64編碼過后的烤惊,所以我們這里填寫的時(shí)候要做base64解碼。

另外需要將解碼過后的\n換成換行符吁朦,不然認(rèn)證會(huì)失敗柒室。

配置完成后,可以直接點(diǎn)擊Deploy逗宜,然后點(diǎn)擊Save雄右,就可以獲取到集群的監(jiān)控資源信息了空骚。

grafana k8s plugins

可以看到上面展示了整個(gè)集群的狀態(tài),可以查看上面的一些 Dashboard:
grafana k8s cluster dashboard

注:或者直接input id 6417也可以監(jiān)控集群

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末擂仍,一起剝皮案震驚了整個(gè)濱河市囤屹,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌逢渔,老刑警劉巖肋坚,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異肃廓,居然都是意外死亡智厌,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門亿昏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來峦剔,“玉大人,你說我怎么就攤上這事角钩×吣” “怎么了?”我有些...
    開封第一講書人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵递礼,是天一觀的道長(zhǎng)惨险。 經(jīng)常有香客問我,道長(zhǎng)脊髓,這世上最難降的妖魔是什么辫愉? 我笑而不...
    開封第一講書人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮将硝,結(jié)果婚禮上恭朗,老公的妹妹穿的比我還像新娘。我一直安慰自己依疼,他們只是感情好痰腮,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著律罢,像睡著了一般膀值。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上误辑,一...
    開封第一講書人閱讀 51,631評(píng)論 1 305
  • 那天沧踏,我揣著相機(jī)與錄音,去河邊找鬼巾钉。 笑死翘狱,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的砰苍。 我是一名探鬼主播盒蟆,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼踏烙,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了历等?” 一聲冷哼從身側(cè)響起讨惩,我...
    開封第一講書人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎寒屯,沒想到半個(gè)月后荐捻,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡寡夹,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年处面,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片菩掏。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡魂角,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出智绸,到底是詐尸還是另有隱情野揪,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布瞧栗,位于F島的核電站斯稳,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏迹恐。R本人自食惡果不足惜挣惰,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望殴边。 院中可真熱鬧憎茂,春花似錦、人聲如沸锤岸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽能耻。三九已至,卻和暖如春亡驰,著一層夾襖步出監(jiān)牢的瞬間晓猛,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工凡辱, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留戒职,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓透乾,卻偏偏與公主長(zhǎng)得像洪燥,于是被迫代替她去往敵國(guó)和親磕秤。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355