摘要:基于友好的開(kāi)源協(xié)議,目前是監(jiān)控展示的首選。配置報(bào)警的收件組和詳細(xì)內(nèi)容。而報(bào)警收件人的配置在專(zhuān)門(mén)的頁(yè)面上已經(jīng)配置的報(bào)警規(guī)則,并展示其觸發(fā)狀態(tài)。借用的一句話(huà)哈哈哈本文為容器監(jiān)控實(shí)踐系列文章,完整內(nèi)容見(jiàn)
概述
Grafana 是一個(gè)開(kāi)源的,可以用于大規(guī)模指標(biāo)數(shù)據(jù)的可視化項(xiàng)目,甚至還能對(duì)指標(biāo)進(jìn)行報(bào)警。基于友好的 Apache License 2.0 開(kāi)源協(xié)議,目前是prometheus監(jiān)控展示的首選。優(yōu)點(diǎn)如下:
配置方便:支持Dashboard、Panel、Row等組合,且支持折線(xiàn)圖、柱狀圖等多種圖例
圖表漂亮:可以選擇暗黑系或純白系,你也可以自己定義顏色
模板很多:grafana模板很活躍,有很多用戶(hù)貢獻(xiàn)的面板,直接導(dǎo)入就能用
支持多種數(shù)據(jù)源:grafana作為展示面板,支持很多數(shù)據(jù)源,如Graphite、ES、Prometheus等
權(quán)限管理簡(jiǎn)單:有admin、viewer等多種角色管控
如果默認(rèn)的grafana不能滿(mǎn)足你的需求,要二次開(kāi)發(fā),官方也提供了很多支持:
協(xié)議為Apache License 2.0:商業(yè)友好,隨便改吧,改完拿去賣(mài)也行。
完善的API調(diào)用:權(quán)限、面板、用戶(hù)、報(bào)警都支持api調(diào)用。
多種鑒權(quán)方式:OAuth、LADP、Proxy多種方式,你可以接入自己公司的鑒權(quán)系統(tǒng)
插件開(kāi)發(fā):如果你不想直接改代碼,可以做自己的插件
go+Angular+react:常用的技術(shù)棧,方便二次開(kāi)發(fā)
prometheus + grafana 做為監(jiān)控組合很方便,很強(qiáng)大,改造了鑒權(quán)之后更加香。一開(kāi)始我們還嘗試使用grafana自帶的報(bào)警功能,可惜比較雞肋,無(wú)法用于生產(chǎn),報(bào)警的issue一大堆官方也不想修改,作罷
部署步驟一:安裝grafana
Grafana提供了很多種部署方式,如果你的展示報(bào)警是在K8S集群外,可以二進(jìn)制直接部署,如果grafana本身在集群內(nèi),或者管理端也是k8s集群,可以用yaml部署:
Deployment配置:
apiVersion: apps/v1 kind: Deployment metadata: namespace: kube-system name: grafana spec: replicas: 1 selector: matchLabels: app: grafana template: metadata: namespace: kube-system annotations: grafana-version: "1.0" name: grafana labels: app: grafana spec: containers: - name: grafana image: grafana/grafana:5.1.0 imagePullPolicy: Always securityContext: runAsUser: 0 env: - name: GF_SECURITY_ADMIN_PASSWORD value: "admin" ports: - name: grafana containerPort: 3000 resources: requests: memory: "100Mi" cpu: "100m" limits: memory: "2048Mi" cpu: "1024m"
Service配置:
apiVersion: v1 kind: Service metadata: namespace: kube-system name: grafana annotations: prometheus.io/scrape: "true" labels: name: grafana spec: selector: app: grafana type: LoadBalancer ports: - name: grafana protocol: TCP port: 3000
grafana配置文件的字段含義:
app_mode:應(yīng)用名稱(chēng),默認(rèn)是production [path] data:一個(gè)grafana用來(lái)存儲(chǔ)sqlite3、臨時(shí)文件、回話(huà)的地址路徑 logs:grafana存儲(chǔ)logs的路徑 [server] http_addr:監(jiān)聽(tīng)的ip地址,,默認(rèn)是0.0.0.0 http_port:監(jiān)聽(tīng)的端口,默認(rèn)是3000 protocol:http或者h(yuǎn)ttps,,默認(rèn)是http domain:這個(gè)設(shè)置是root_url的一部分,當(dāng)你通過(guò)瀏覽器訪(fǎng)問(wèn)grafana時(shí)的公開(kāi)的domian名稱(chēng),默認(rèn)是localhost enforce_domain:如果主機(jī)的header不匹配domian,則跳轉(zhuǎn)到一個(gè)正確的domain上,默認(rèn)是false root_url:這是一個(gè)web上訪(fǎng)問(wèn)grafana的全路徑url,默認(rèn)是%(protocol)s://%(domain)s:%(http_port)s/ router_logging:是否記錄web請(qǐng)求日志,默認(rèn)是false cert_file:如果使用https則需要設(shè)置 cert_key:如果使用https則需要設(shè)置 [database] grafana默認(rèn)需要使用數(shù)據(jù)庫(kù)存儲(chǔ)用戶(hù)和dashboard信息,默認(rèn)使用sqlite3來(lái)存儲(chǔ),你也可以換成其他數(shù)據(jù)庫(kù) type:可以是mysql、postgres、sqlite3,默認(rèn)是sqlite3 path:只是sqlite3需要,定義sqlite3的存儲(chǔ)路徑 host:只是mysql、postgres需要,默認(rèn)是127.0.0.1:3306 name:grafana的數(shù)據(jù)庫(kù)名稱(chēng),默認(rèn)是grafana user:連接數(shù)據(jù)庫(kù)的用戶(hù) password:數(shù)據(jù)庫(kù)用戶(hù)的密碼 ssl_mode:只是postgres使用 [security] admin_user:grafana默認(rèn)的admin用戶(hù),默認(rèn)是admin admin_password:grafana admin的默認(rèn)密碼,默認(rèn)是admin login_remember_days:多少天內(nèi)保持登錄狀態(tài) secret_key:保持登錄狀態(tài)的簽名 disable_gravatar: [users] allow_sign_up:是否允許普通用戶(hù)登錄,如果設(shè)置為false,則禁止用戶(hù)登錄,默認(rèn)是true,則admin可以創(chuàng)建用戶(hù),并登錄grafana allow_org_create:如果設(shè)置為false,則禁止用戶(hù)創(chuàng)建新組織,默認(rèn)是true auto_assign_org:當(dāng)設(shè)置為true的時(shí)候,會(huì)自動(dòng)的把新增用戶(hù)增加到id為1的組織中,當(dāng)設(shè)置為false的時(shí)候,新建用戶(hù)的時(shí)候會(huì)新增一個(gè)組織 auto_assign_org_role:新建用戶(hù)附加的規(guī)則,默認(rèn)是Viewer,還可以是Admin、Editor [auth.anonymous] enabled:設(shè)置為true,則開(kāi)啟允許匿名訪(fǎng)問(wèn),默認(rèn)是false org_name:為匿名用戶(hù)設(shè)置組織名稱(chēng) org_role:為匿名用戶(hù)設(shè)置的訪(fǎng)問(wèn)規(guī)則,默認(rèn)是Viewer [auth.github] 針對(duì)github項(xiàng)目的,很明顯,呵呵 enabled = false allow_sign_up = false client_id = some_id client_secret = some_secret scopes = user:email auth_url = https://github.com/login/oauth/authorize token_url = https://github.com/login/oauth/access_token api_url = https://api.github.com/user team_ids = allowed_domains = allowed_organizations = [auth.google] 針對(duì)google app的,呵呵 enabled = false allow_sign_up = false client_id = some_client_id client_secret = some_client_secret scopes = https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email auth_url = https://accounts.google.com/o/oauth2/auth token_url = https://accounts.google.com/o/oauth2/token api_url = https://www.googleapis.com/oauth2/v1/userinfo allowed_domains = [auth.basic] enabled:當(dāng)設(shè)置為true,則http api開(kāi)啟基本認(rèn)證 [auth.ldap] enabled:設(shè)置為true則開(kāi)啟LDAP認(rèn)證,默認(rèn)是false config_file:如果開(kāi)啟LDAP,指定LDAP的配置文件/etc/grafana/ldap.toml [auth.proxy] 允許你在一個(gè)HTTP反向代理上進(jìn)行認(rèn)證設(shè)置 enabled:默認(rèn)是false header_name:默認(rèn)是X-WEBAUTH-USER header_property:默認(rèn)是個(gè)名稱(chēng)username auto_sign_up:默認(rèn)是true。開(kāi)啟自動(dòng)注冊(cè),如果用戶(hù)在grafana DB中不存在 [analytics] reporting_enabled:如果設(shè)置為true,則會(huì)發(fā)送匿名使用分析到stats.grafana.org,主要用于跟蹤允許實(shí)例、版本、dashboard、錯(cuò)誤統(tǒng)計(jì)。默認(rèn)是true google_analytics_ua_id:使用GA進(jìn)行分析,填寫(xiě)你的GA ID即可 [dashboards.json] 如果你有一個(gè)系統(tǒng)自動(dòng)產(chǎn)生json格式的dashboard,則可以開(kāi)啟這個(gè)特性試試 enabled:默認(rèn)是false path:一個(gè)全路徑用來(lái)包含你的json dashboard,默認(rèn)是/var/lib/grafana/dashboards [session] provider:默認(rèn)是file,值還可以是memory、mysql、postgres provider_config:這個(gè)值的配置由provider的設(shè)置來(lái)確定,如果provider是file,則是data/xxxx路徑類(lèi)型,如果provider是mysql,則是user:password@tcp(127.0.0.1:3306)/database_name,如果provider是postgres,則是user=a password=b host=localhost port=5432 dbname=c sslmode=disable cookie_name:grafana的cookie名稱(chēng) cookie_secure:如果設(shè)置為true,則grafana依賴(lài)https,默認(rèn)是false session_life_time:session過(guò)期時(shí)間,默認(rèn)是86400秒,24小時(shí) 以下是官方文檔沒(méi)有,配置文件中有的 [smtp] enabled = false host = localhost:25 user = password = cert_file = key_file = skip_verify = false from_address = admin@grafana.localhost [emails] welcome_email_on_sign_up = false templates_pattern = emails/*.html [log] mode:可以是console、file,默認(rèn)是console、file,也可以設(shè)置多個(gè),用逗號(hào)隔開(kāi) buffer_len:channel的buffer長(zhǎng)度,默認(rèn)是10000 level:可以是"Trace", "Debug", "Info", "Warn", "Error", "Critical",默認(rèn)是info [log.console] level:設(shè)置級(jí)別 [log.file] level:設(shè)置級(jí)別 log_rotate:是否開(kāi)啟自動(dòng)輪轉(zhuǎn) max_lines:?jiǎn)蝹€(gè)日志文件的最大行數(shù),默認(rèn)是1000000 max_lines_shift:?jiǎn)蝹€(gè)日志文件的最大大小,默認(rèn)是28,表示256MB daily_rotate:每天是否進(jìn)行日志輪轉(zhuǎn),默認(rèn)是true max_days:日志過(guò)期時(shí)間,默認(rèn)是7,7天后刪除
注意的幾個(gè)點(diǎn):
對(duì)所有的資源都做request、limit限制,防止耗盡主機(jī)資源
grafana的一些配置可以通過(guò)變量傳入:如admin的密碼GF_SECURITY_ADMIN_PASSWORD
如果要對(duì)grafana的數(shù)據(jù)進(jìn)行持久化,建議掛volume或者外部存儲(chǔ),持久化的內(nèi)容一般都是面板配置。監(jiān)控面板的配置可以導(dǎo)入導(dǎo)出
securityContext:因?yàn)榘姹締?wèn)題,如果提示grafana的權(quán)限不足,可以配置runAsUser: 0
創(chuàng)建了grafana之后,可以通過(guò)service暴露的端口地址查看頁(yè)面:
登錄成功后,會(huì)顯示需要初始化的內(nèi)容
步驟二:配置數(shù)據(jù)源
grafana支持多種數(shù)據(jù)源,可以在“type”的下拉框選項(xiàng)中看到,這里我們選擇prometheus作為數(shù)據(jù)源。HTTP的訪(fǎng)問(wèn)方式選擇proxy,URL填寫(xiě)grafana能訪(fǎng)問(wèn)到的地址。
因?yàn)間rafana和prometheus都在同一個(gè)k8s集群中,這里用svc地址
點(diǎn)擊“save and test”測(cè)試連接性。
步驟三:創(chuàng)建面板
有了數(shù)據(jù)源,接下來(lái)就是如何更好地展示數(shù)據(jù),grafana支持多種類(lèi)型的圖表,如Graph、singlestat、Table等??梢越M合出多種形式。這里先創(chuàng)建一個(gè)Demo,保存現(xiàn)有模板的快捷鍵是Ctrl + S
你的所有面板都可以在左上角的下拉框中找到:
我們還可以導(dǎo)入現(xiàn)有的面板(Dashboard),大家貢獻(xiàn)的模板地址:https://grafana.com/dashboards
選擇左上角的?號(hào),然后import,有兩種形式的導(dǎo)入:
URL直接導(dǎo)入:粘貼對(duì)應(yīng)模板的url,前提是grafana必須能訪(fǎng)問(wèn)外網(wǎng)。
上傳json文件:一般是遷移時(shí)使用,把現(xiàn)有的json導(dǎo)出,再導(dǎo)入
grafana的面板、圖表有很多配置,接下來(lái)我們說(shuō)幾個(gè)常用的配置項(xiàng)
常用配置示例:K8S的節(jié)點(diǎn)數(shù)量趨勢(shì)圖
編輯圖表時(shí)默認(rèn)進(jìn)入的是Metric,內(nèi)容包括:
Data Source:填寫(xiě)剛剛配置過(guò)的數(shù)據(jù)源的名稱(chēng),這里是prometheus
A和B指的是這張圖有幾條線(xiàn),這里是A一條線(xiàn)、右側(cè)的小眼睛代表是否隱藏該線(xiàn)
A線(xiàn)中,輸入框填寫(xiě)的是查詢(xún)語(yǔ)句,這里指合法的promsql,legend format指A線(xiàn)的顯示名稱(chēng)
除了Metric之外,還有幾個(gè)選項(xiàng),含義分別是:
General:一般是將其他項(xiàng)都配置好后再回頭設(shè)置General,而在General配置標(biāo)簽中一般只會(huì)用到“Title”,就是圖表的標(biāo)題,如這里的Node數(shù)量
Title:圖表標(biāo)題; Description:圖表描述; Span:圖表間隔,無(wú)需設(shè)定,在前端可手動(dòng)調(diào)整圖表大?。?Height:圖表高度,無(wú)需設(shè)定,在前端可手動(dòng)調(diào)整圖表高度; Transparent:背景是否透明,默認(rèn)情況下不勾選,如果覺(jué)得不需要深灰色背景,可以勾選此項(xiàng); Templating和Drilldown / detail link用處不大,忽略即可。
Metric:比較重要,配指標(biāo)表達(dá)式和指標(biāo)線(xiàn)的地方,上邊已經(jīng)舉例
Axes:配置數(shù)據(jù)軸的地方,如偏移縮放,格式轉(zhuǎn)換
Legend:圖例,是否限制以及顯示的方式
Display: 展示相關(guān)的配置,如線(xiàn)條寬度,排序方式、空值處理
Alert: 報(bào)警配置,grafana算是少有的展示圖表支持報(bào)警的,但他的報(bào)警只支持到單圖表,無(wú)法嵌套模板,有點(diǎn)雞肋。如左上角有篩選node的下拉框,圖表又傳入了變量時(shí),如果配置報(bào)警,是配置失敗的。報(bào)錯(cuò)為:“Template variables are not supported in alert queries”
TimeRange: 配置單圖表的展示時(shí)間,如24h內(nèi)的數(shù)據(jù)
Override relative time: 覆蓋右上角選擇的時(shí)間,設(shè)置要顯示的時(shí)間范圍,這里我設(shè)置24h(單位自己可選)。 Add time shift: 這里是偏移量設(shè)置,比如填寫(xiě)2h表示不顯示最近2h的數(shù)據(jù)。 Hide time ocerride info: 上邊相對(duì)時(shí)間設(shè)置之后在graph中會(huì)顯示本圖表的時(shí)間信息,在此處選擇后可以把顯示的信息隱藏掉
更多詳細(xì)的配置可以查看:https://grafana.com/docs/features/panels/graph/
變量配置:
對(duì)于一些復(fù)雜場(chǎng)景,可能需要傳入變量,如有多臺(tái)機(jī)器,每臺(tái)機(jī)器都要展示其cpu內(nèi)存等指標(biāo)。而機(jī)器列表又是動(dòng)態(tài)的,這個(gè)時(shí)候就可以使用變量,示例:
首先在該面板的setting中選擇variables,注意是該面板的設(shè)置,不是全局設(shè)置
填寫(xiě)名稱(chēng),下拉框選項(xiàng)的數(shù)據(jù)獲取表達(dá)式,刷新周期,是否有ALL選項(xiàng)等,然后保存
接下來(lái)在具體的圖表中使用該變量
在metric中,將變量$Node寫(xiě)在表達(dá)式中做匹配即可。
grafana的變量支持高級(jí)匹配,如$Node.*代表以Node開(kāi)頭的字符,利用變量的方式,可以實(shí)現(xiàn)多級(jí)篩選,滿(mǎn)足更復(fù)雜的需求,如pod資源的查看
關(guān)于變量的更多信息:what-is-a-variable
報(bào)警配置grafana在v4.0版本開(kāi)始引入了報(bào)警功能。
還是以Node節(jié)點(diǎn)數(shù)為例,我們配置一條規(guī)則:
當(dāng)可用節(jié)點(diǎn)數(shù)小于3時(shí),報(bào)警給demo@126.com
alert支持avg、sum等表達(dá)式,不過(guò)持續(xù)時(shí)間依賴(lài)數(shù)據(jù)本身的采集頻率。需要多測(cè)試一下。
Notifications:配置報(bào)警的收件組和詳細(xì)內(nèi)容。而報(bào)警收件人的配置在專(zhuān)門(mén)的Alerting頁(yè)面上
Alert Rules:已經(jīng)配置的報(bào)警規(guī)則,并展示其觸發(fā)狀態(tài)。
報(bào)警郵件的樣式:
模板變量報(bào)警
以上的報(bào)警配置方式只適合沒(méi)有變量傳入的圖表,如果遇到上邊提到的選擇node,傳入變量的圖表,就沒(méi)辦法支持了。
相關(guān)issue:https://github.com/grafana/gr...
官方對(duì)這個(gè)功能解釋了一堆,最新版本仍然沒(méi)有支持。借用issue的一句話(huà)哈哈哈
It would be grate to add templates support in alerts. Otherwise the feature looks useless a bit.
本文為容器監(jiān)控實(shí)踐系列文章,完整內(nèi)容見(jiàn):container-monitor-book
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/33186.html
showImg(https://segmentfault.com/img/remote/1460000014421849); 概述 一個(gè)宿主機(jī)上可以運(yùn)行多個(gè)容器化應(yīng)用,容器化應(yīng)用運(yùn)行于宿主機(jī)上,我們需要知道該容器的運(yùn)行情況,包括 CPU使用率、內(nèi)存占用、網(wǎng)絡(luò)狀況以及磁盤(pán)空間等等一系列信息,而且這些信息隨時(shí)間變化,我們稱(chēng)其為時(shí)序數(shù)據(jù),本文將實(shí)操 如何搭建一個(gè)可視化的監(jiān)控中心 來(lái)收集這些承載著具體應(yīng)...
摘要:二可視化是一個(gè)開(kāi)源的圖表可視化系統(tǒng),簡(jiǎn)單說(shuō)圖表配置比較方便生成的圖表比較漂亮。 一. 概述 Prometheus自帶了一個(gè)web服務(wù),包括一個(gè)默認(rèn)的dashboard,可以使用表達(dá)式查詢(xún)并進(jìn)行圖表可視化,默認(rèn)服務(wù)的地址為:http://prometheus_ip:9090 如下圖: showImg(https://segmentfault.com/img/remote/14600000...
摘要:二可視化是一個(gè)開(kāi)源的圖表可視化系統(tǒng),簡(jiǎn)單說(shuō)圖表配置比較方便生成的圖表比較漂亮。 一. 概述 Prometheus自帶了一個(gè)web服務(wù),包括一個(gè)默認(rèn)的dashboard,可以使用表達(dá)式查詢(xún)并進(jìn)行圖表可視化,默認(rèn)服務(wù)的地址為:http://prometheus_ip:9090 如下圖: showImg(https://segmentfault.com/img/remote/14600000...
摘要:二可視化是一個(gè)開(kāi)源的圖表可視化系統(tǒng),簡(jiǎn)單說(shuō)圖表配置比較方便生成的圖表比較漂亮。 一. 概述 Prometheus自帶了一個(gè)web服務(wù),包括一個(gè)默認(rèn)的dashboard,可以使用表達(dá)式查詢(xún)并進(jìn)行圖表可視化,默認(rèn)服務(wù)的地址為:http://prometheus_ip:9090 如下圖: showImg(https://segmentfault.com/img/remote/14600000...
摘要:在和未普及之前,要實(shí)現(xiàn)的搭建確實(shí)要費(fèi)一番工夫的,不過(guò)現(xiàn)在則很簡(jiǎn)單就可以實(shí)現(xiàn)的監(jiān)控了。下載鏡像使用方式下載極為方便,只需要執(zhí)行如下命令即可,當(dāng)然前提是需要安裝了。 一、背景 對(duì)于LNMP環(huán)境下的開(kāi)發(fā)者來(lái)說(shuō),mysql是非常重要的一環(huán),同時(shí)mysql的性能監(jiān)控也是開(kāi)發(fā)者所需要關(guān)注的一環(huán);如果大家使用阿里云的RDS會(huì)感覺(jué)到其監(jiān)控功能非常好用,但如果開(kāi)發(fā)者使用的是自建數(shù)據(jù)庫(kù),該怎么去搭建則需則...
閱讀 1240·2021-11-22 13:52
閱讀 1569·2021-11-19 09:40
閱讀 3460·2021-11-16 11:44
閱讀 1487·2021-11-15 11:39
閱讀 4123·2021-10-08 10:04
閱讀 5599·2021-09-22 14:57
閱讀 3254·2021-09-10 10:50
閱讀 3328·2021-08-17 10:13