添加并使用標(biāo)簽
ARMS標(biāo)簽功能支持以一種全新的維度,組織并觀察應(yīng)用監(jiān)控指標(biāo)、調(diào)用鏈、日志等數(shù)據(jù)。本文介紹如何將應(yīng)用接入標(biāo)簽中心,實(shí)現(xiàn)基于應(yīng)用標(biāo)簽的應(yīng)用篩選和權(quán)限管理,并在應(yīng)用詳情和Grafana視圖頁(yè)面通過(guò)實(shí)例標(biāo)簽篩選應(yīng)用監(jiān)控?cái)?shù)據(jù)。
前提條件
已將應(yīng)用接入ARMS應(yīng)用監(jiān)控。具體操作,請(qǐng)參見(jiàn)應(yīng)用監(jiān)控接入概述。
對(duì)于Java應(yīng)用,還需滿(mǎn)足以下要求:
對(duì)于容器集群應(yīng)用,請(qǐng)確認(rèn)ack-onepilot組件的版本在v3.0.4或以上且ARMS探針版本在v2.7.3.5或以上。
對(duì)于其他環(huán)境應(yīng)用,請(qǐng)確認(rèn)ARMS探針版本在v2.7.3.5或以上,您可以在ARMS控制臺(tái) 頁(yè)面下的探針版本發(fā)布說(shuō)明頁(yè)簽獲取最新的ARMS探針安裝包。
標(biāo)簽類(lèi)型
目前ARMS應(yīng)用監(jiān)控提供兩種維度的標(biāo)簽:應(yīng)用標(biāo)簽和實(shí)例標(biāo)簽,請(qǐng)您根據(jù)使用場(chǎng)景選擇合適的標(biāo)簽類(lèi)型。應(yīng)用標(biāo)簽和實(shí)例標(biāo)簽都采用鍵值對(duì)(Key-Value)的數(shù)據(jù)結(jié)構(gòu),可以同時(shí)添加多個(gè)鍵值對(duì)。
應(yīng)用標(biāo)簽
作用于ARMS應(yīng)用上,您可以在ARMS控制臺(tái) 頁(yè)面查看或修改應(yīng)用標(biāo)簽。通過(guò)應(yīng)用標(biāo)簽,可以實(shí)現(xiàn)應(yīng)用篩選、應(yīng)用權(quán)限管理、成本分賬等方面的需求。
實(shí)例標(biāo)簽
在ARMS的設(shè)計(jì)中,一個(gè)應(yīng)用可以包含多個(gè)應(yīng)用實(shí)例,每個(gè)應(yīng)用實(shí)例都代表一個(gè)應(yīng)用進(jìn)程,它們通過(guò)相同的應(yīng)用名接入到ARMS中。不同于應(yīng)用標(biāo)簽,實(shí)例標(biāo)簽作用在應(yīng)用實(shí)例上,對(duì)于同屬一個(gè)應(yīng)用的不同應(yīng)用實(shí)例,它們可以擁有不同的實(shí)例標(biāo)簽。
對(duì)于Kubernetes環(huán)境下自動(dòng)接入ARMS應(yīng)用監(jiān)控的應(yīng)用實(shí)例,ARMS會(huì)默認(rèn)寫(xiě)入如下實(shí)例標(biāo)簽:
標(biāo)簽Key | 說(shuō)明 |
workloadKind | 應(yīng)用實(shí)例所在的工作負(fù)載的類(lèi)型,例如Deployment。 |
workloadName | 應(yīng)用實(shí)例所在的工作負(fù)載的名字。 |
clusterName | 應(yīng)用實(shí)例所在的K8s集群名。 |
namespace | 應(yīng)用實(shí)例所在的K8s命名空間。 |
version | 鏡像的tag。 可被自定義實(shí)例標(biāo)簽覆蓋。 |
agentVersion | 探針版本。 |
除了默認(rèn)實(shí)例標(biāo)簽外,您還可以添加自定義實(shí)例標(biāo)簽。同時(shí),實(shí)例標(biāo)簽還會(huì)完整地繼承應(yīng)用標(biāo)簽,ARMS為應(yīng)用實(shí)例產(chǎn)生的監(jiān)控?cái)?shù)據(jù)中,都會(huì)帶上對(duì)應(yīng)的實(shí)例標(biāo)簽。
自定義實(shí)例標(biāo)簽的Key建議滿(mǎn)足Prometheus命名規(guī)范,即符合正則規(guī)則:^[a-zA-Z_][a-zA-Z0-9_]*$
。對(duì)于不符合正則規(guī)則的Key,ARMS探針會(huì)采用下劃線(_)對(duì)不合規(guī)片段進(jìn)行替代處理,例如:1key:1value
會(huì)被替換為_key:1value
。
示例:
如下圖所示,應(yīng)用my-app包含兩個(gè)實(shí)例,ARMS為實(shí)例B生成的指標(biāo)數(shù)據(jù)中包含的標(biāo)簽為{env: Dev, team: Observability, app: my-app, workloadKind: Deployment, workloadName: my-app, clusterName: ClusterA, namespace: nsA, gitVersion: 1.0.2}
。
添加自定義實(shí)例標(biāo)簽
為部署在Kubernetes集群中的應(yīng)用添加自定義實(shí)例標(biāo)簽
方式一(推薦):通過(guò)Pod Label方式注入自定義實(shí)例標(biāo)簽
對(duì)于部署在Kubernetes環(huán)境中自動(dòng)安裝ARMS探針的應(yīng)用,可以通過(guò)Pod Label添加自定義實(shí)例標(biāo)簽。
這種方式同時(shí)適合部署在阿里云容器服務(wù)ACK環(huán)境和通用Kubernetes環(huán)境中的應(yīng)用。ACK環(huán)境和通用Kubernetes環(huán)境自動(dòng)安裝探針的操作,請(qǐng)參見(jiàn)應(yīng)用監(jiān)控接入概述。
以部署在ACK環(huán)境中的應(yīng)用為例:
在容器服務(wù)管理控制臺(tái)目標(biāo)集群下的無(wú)狀態(tài)或有狀態(tài)頁(yè)面頂部選擇目標(biāo)命名空間,然后在目標(biāo)應(yīng)用右側(cè)選擇 ,在編輯YAML對(duì)話(huà)框中添加自定義標(biāo)簽后單擊更新。應(yīng)用實(shí)例將觸發(fā)重啟,并加入新的實(shí)例標(biāo)簽。
方式二:通過(guò)Pod環(huán)境變量方式注入自定義實(shí)例標(biāo)簽
Java應(yīng)用如需使用該方式,探針版本需要在4.0.0及以上版本。
對(duì)于某些pod創(chuàng)建后才能獲取到的自定義標(biāo)簽(如podName),您可以通過(guò)在應(yīng)用容器的啟動(dòng)腳本中增加操作系統(tǒng)環(huán)境變量來(lái)實(shí)現(xiàn)自定義實(shí)例標(biāo)簽的注入,具體方式如下:
為您的應(yīng)用容器增加一個(gè)名為ARMS_HOST_TAGS的環(huán)境變量,值為您的實(shí)例標(biāo)簽,多個(gè)標(biāo)簽之間使用
key1:value1&key2:value2
的格式輸入,例如:?export ARMS_HOST_TAGS="gitVersion:1.0.2&ip:192.168.1.101"
。在環(huán)境變量生效后,再啟動(dòng)應(yīng)用進(jìn)程。
為手動(dòng)安裝探針的應(yīng)用添加自定義實(shí)例標(biāo)簽
Java應(yīng)用
方式一:添加-D命令行參數(shù)
請(qǐng)?jiān)谀?span id="z68uejxpaoma" class="help-letter-space">Java應(yīng)用啟動(dòng)參數(shù)中添加-Darms.host.tags="${yourLabel}"
。
請(qǐng)將${yourLabel}
替換為您需要添加的實(shí)例標(biāo)簽,多個(gè)標(biāo)簽之間使用key1:value1&key2:value2
的格式輸入,例如:-Darms.host.tags="gitVersion:1.0.2&ip:192.168.1.101"
。
方式二:修改配置文件
探針版本為低于4.0.0
修改探針安裝包中arms-agent.config配置文件的profiler.tags.customtags字段,可以添加自定義實(shí)例標(biāo)簽,多個(gè)標(biāo)簽之間使用
key1:value1&key2:value2
的格式輸入,例如:#profiler.tags.customtags=key1:value1&key2:value2 profiler.tags.customtags=gitVersion:1.0.2&ip:192.168.1.101
重啟應(yīng)用進(jìn)程。
探針版本高于4.0.0
在任意目錄下新建一個(gè).properties后綴的配置文件,在配置文件中增加profiler.tags.customtags字段,value指定為您需要添加的實(shí)例標(biāo)簽,多個(gè)標(biāo)簽之間使用
key1:value1&key2:value2
的格式輸入,例如:#profiler.tags.customtags=key1:value1&key2:value2 profiler.tags.customtags=gitVersion:1.0.2&ip:192.168.1.101
在您的Java應(yīng)用啟動(dòng)參數(shù)中添加
-Dotel.javaagent.configuration-file=${path/to/config/file}
。請(qǐng)將
${path/to/config/file}
替換為您剛剛創(chuàng)建的配置文件全路徑,例如:-Dotel.javaagent.configuration-file=/home/admin/config/agent-config.properties
。重啟應(yīng)用進(jìn)程。
Golang應(yīng)用
聲明環(huán)境變量,然后重啟應(yīng)用進(jìn)程。
#export PROFILER_TAGS_CUSTOMTAGS=key1:value1
export PROFILER_TAGS_CUSTOMTAGS=gitVersion:1.0.2
K8s環(huán)境下通過(guò)Pod Label注入應(yīng)用標(biāo)簽
Java應(yīng)用僅3.0.16及以上版本的ack-onepilot組件支持通過(guò)Pod Label注入應(yīng)用標(biāo)簽。
如果Pod Label帶有app.customAppKey.
前綴,則會(huì)被識(shí)別為應(yīng)用標(biāo)簽,而不是實(shí)例標(biāo)簽。
例如以下代碼,ARMS會(huì)為這個(gè)工作負(fù)載接入的應(yīng)用加上應(yīng)用標(biāo)簽env: dev。
template:
metadata:
labels:
app.customAppKey.env: dev
app: mall-gateway
armsPilotAutoEnable: 'on'
aliyun.com/app-language: golang # Go應(yīng)用必填,標(biāo)明此應(yīng)用是Go應(yīng)用。Java應(yīng)用無(wú)需設(shè)置。
armsPilotCreateAppName: mall-gateway
在ARMS中,應(yīng)用是一種聚合概念,代表多個(gè)應(yīng)用實(shí)例的集合。1個(gè)應(yīng)用可以擁有多個(gè)應(yīng)用實(shí)例,也可以來(lái)自于多個(gè)工作負(fù)載,或者多個(gè)K8s集群。所以,通過(guò)Pod Label注入應(yīng)用標(biāo)簽只能作為DevOps場(chǎng)景下的便捷操作,存在一定的局限性。
通過(guò)Pod Label注入的應(yīng)用標(biāo)簽只增不減,如果要修改或刪除已有的標(biāo)簽key,需要在修改YAML文件之后,再通過(guò)ARMS控制臺(tái)或OpenAPI進(jìn)行操作。
多個(gè)工作負(fù)載接入同一個(gè)ARMS應(yīng)用的情況下,通過(guò)Pod Label注入的應(yīng)用標(biāo)簽會(huì)造成沖突,用戶(hù)需要自行確保應(yīng)用標(biāo)簽的一致性。
使用應(yīng)用標(biāo)簽
應(yīng)用篩選
在ARMS應(yīng)用列表,以及創(chuàng)建告警規(guī)則等功能中,可以基于應(yīng)用標(biāo)簽快捷篩選應(yīng)用。
基于標(biāo)簽的權(quán)限管理
基于應(yīng)用標(biāo)簽管理RAM權(quán)限,具體操作,請(qǐng)參見(jiàn)應(yīng)用監(jiān)控自定義RAM授權(quán)策略。
使用實(shí)例標(biāo)簽
在應(yīng)用詳情中根據(jù)實(shí)例標(biāo)簽過(guò)濾監(jiān)控?cái)?shù)據(jù)
登錄ARMS控制臺(tái),在左側(cè)導(dǎo)航欄選擇 。
在應(yīng)用列表頁(yè)面頂部選擇目標(biāo)地域,然后單擊目標(biāo)應(yīng)用名稱(chēng)。
說(shuō)明語(yǔ)言列的圖標(biāo)含義如下:
:接入應(yīng)用監(jiān)控的Java應(yīng)用。
:接入應(yīng)用監(jiān)控的Golang應(yīng)用。
:接入應(yīng)用監(jiān)控的Python應(yīng)用。
-:接入可觀測(cè)鏈路 OpenTelemetry 版的應(yīng)用。
在應(yīng)用詳情的多個(gè)頁(yè)面中,都可以根據(jù)實(shí)例標(biāo)簽過(guò)濾監(jiān)控?cái)?shù)據(jù),例如根據(jù)鏡像版本號(hào)進(jìn)行對(duì)比分析。
在Grafana視圖頁(yè)面通過(guò)標(biāo)簽查詢(xún)監(jiān)控指標(biāo)
登錄ARMS控制臺(tái),在左側(cè)導(dǎo)航欄選擇 。
在應(yīng)用列表頁(yè)面頂部選擇目標(biāo)地域,然后單擊目標(biāo)應(yīng)用名稱(chēng)。
說(shuō)明語(yǔ)言列的圖標(biāo)含義如下:
:接入應(yīng)用監(jiān)控的Java應(yīng)用。
:接入應(yīng)用監(jiān)控的Golang應(yīng)用。
:接入應(yīng)用監(jiān)控的Python應(yīng)用。
-:接入可觀測(cè)鏈路 OpenTelemetry 版的應(yīng)用。
在左側(cè)導(dǎo)航欄單擊Grafana視圖,在右側(cè)頁(yè)面頂部選擇不同的標(biāo)簽,查看對(duì)應(yīng)的監(jiān)控指標(biāo)。