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