引言
自從2018年從Cloud Native Computing Foundation(CNCF)出現以來,您可能已經在使用K8作業系統,隨著容器雲技術大發展以及落地,提高了企業運維的效率和質量,並且降低了企業運營成本,但同時帶來的問題是運維的複雜度和難度,舉個例子:由於容器的生命周期短,隨時可能飄移到其他物理資源上運行,因此日誌的採集和運行的監控很難像傳統方式登錄到伺服器上查看,而運營團隊需要了解有價值的數據來進行問題定位以及運營數據分析。
為了更廣泛地提供這種可觀察性,我們需要提供滿足雲原生環境下的監控能力。
JFrog 通過使用Elasticsearch和Kibana套件,以及Prometheus 和Grafana套件來監控Artifactory 製品庫以及Xray 漏洞掃描工具的運行情況,下面我們一起了解JFrog 如何在雲原生環境進行應用運維。
日誌分析
Easticsearch是一個分布式且可擴展的搜尋引擎,可用於搜索全文,結構化文本和分析。它通常用於搜索大量數據以及搜索不同類型的文檔。
Kibana是Elasticsearch最常用的可視化和儀錶板。Kibana使您能夠通過構建可視化和儀錶板的Web UI探索Elasticsearch日誌數據。
下面我們將向您展示如何利用同類最佳的開源日誌分析技術:Elastic,Fluentd和Kibana為運營團隊提供100%免費的開源日誌分析平臺
首先使用Fluentd,我們提供了與開源數據收集器Fluentd 的JFrog日誌分析集成配置,該集成可隨JFrog Platform部署的每個產品實例安裝。Fluentd在JFrog平臺中為每個產品執行日誌輸入,欄位提取和記錄轉換,從而將該數據的輸出標準化為JSON。
由於所有日誌數據均以這種通用格式提供,因此Fluentd將通過Fluentd的可插入體系結構將其傳送到您的Elasticsearch分析工具。
安裝FluentD
安裝FluentD,每個JPD(JFrog Platfrom Deployment)節點都需要安裝Fluentd日誌記錄代理。該代理將負責為新的日誌行添加各種JPD日誌文件以解析到欄位中,應用相應的記錄轉換,然後發送到Fluentd的相關輸出插件。
例如,對於運行Red Hat UBI Linux的節點,td-agent必須安裝Fluentd代理。對於基於root的程序包管理器(需要root訪問):
$ curl -L https://toolbelt.treasuredata.com/sh/install-redhat-td-agent3.sh | SH
配置FluentD
根據我們是剛剛完成基於根的安裝還是基於非根的安裝,可能需要將Fluentd配置文件放置在不同的位置。
默認情況下,對於軟體包管理器根安裝,該td-agent.conf文件位於中/etc/td-agent/。
$ ls -al /etc/td-agent/td-agent.conf
-rw-r--r-- 1根root 8017 May 11 18:09 /etc/td-agent/td-agent.conf
對於非root的安裝,我們可以將td-agent.conf文件存儲在我們具有寫許可權的任何位置。運行td-agent時,可以使用該-c標記將fluentd指向該文件位置。
該配置文件必須替換為從JFrog日誌分析Github存儲庫派生的配置文件。
在此存儲庫中,彈性文件夾包含配置文件模板。使用與節點中運行的JFrog應用程式匹配的模板:
Artifactory 7.xXray 3.xArtifactory 6.x
以Artifactory 為例子,添加採集日誌配置如下:
我們將需要使用match指令更新此配置文件,該指令指定指向我們的Elasticsearch實例的主機和埠:
#ELASTIC OUTPUT
@type elasticsearch
@id elasticsearch
host elasticsearch
port 9200
index_name unified-artifactory
include_tag_key true
type_name fluentd
logstash_format false
#END ELASTIC OUTPUT
此處的主機是我們的內部K8s集群主機。如果以其他方式配置Elasticsearch和Kibana,也可以將其設置為外部IP位址。
運行FluentD
現在我們已經有了新的配置文件,我們可以在登錄到容器後在容器上啟動td-agent作為服務:
$ systemctl啟動td-agent
或
$ td-agent -c td-agent.conf
這將啟動Fluentd日誌採集代理,該代理將跟蹤JPD日誌並將其全部發送到Elasticsearch。
您必須有運行Artifactory和Xray的所有Kubernetes Pod重複執行此過程,當然也可以添加Side Car 容器到Artifactory和Xray 組件中。
使用Elasticsearch和Kibana
如果尚未安裝和配置Elasticsearch以及設置Kibana,我們提供了一些必要的引導和對應的YAML文件,用於將Elasticsearch和Kibana部署到Kubernetes。
通過Kibana,在每個Artifactory和Xray Pod中安裝Fluentd並運行td-agent的情況下,您可以在Kibana索引管理頁面中看到生成的索引,如下圖:
同時JFrog集成提供了一個NDJSON文件,該文件定義了索引模式和可視化配置。可以通過「 Kibana保存的對象」頁面導入該文件。單擊「導入」按鈕導入該文件。
導入後,您應該能夠看到索引模式,可視化效果,儀錶板,小部件,如下圖:
在索引模式中,您可以看到我們有2個JFrog Product相關Scripted Field。
這是因為我們要將request_content_length和response_content_length轉換為GB。您可以在「 Discover」部分中查看正在生成的日誌。
最後,讓我們查看儀錶板,該儀錶板現在包含在數據小部件(Wedgets)中顯示的信息,以使您可以實時觀察JFrog Unified Platform的日誌數據,包含以下數據,如下圖:
l 日誌卷,可以按類型過濾
l 服務錯誤
l HTTP響應碼
l 存取儲存庫
l 以GB為單位的數據傳輸,用於上傳/下載
l 上傳/下載的top 10的IP
l 通過用戶名審核操作
l IP和用戶名拒絕的操作和登錄
l 按用戶名的上傳操作
應用監控
雲原生環境本身會提供基礎的資源監控,但是缺少足夠的應用內部監控用於更好的進行運營決策,為了增強您監控能力,我們使用Promethus和Grafana套件進行監控,並提供了相應的集成配置手冊:JFrog log analytics solution for Prometheus and Grafana.
通過此集成,可以收集JFrog Platform日誌數據並轉化為相應的監控指標(Promethus metrics),以使用可視化工具Grafana獲得應用內視。
監控原理以及數據流如下圖:
安裝FluentD
總體安裝過程與上一章節一致,和日誌分析不同的是,我們如何不改變業務邏輯的同時暴露指標服務,以便使用監控工具快速分析。
這裡我們需要安裝Prometheus FluentD插件,該插件將我們的日誌記錄轉換為Prometheus的HTTP指標接口(Metrics)。
配置FluentD
FluentD使用文本配置文件進行配置,該文件包含輸入源,過濾器和輸出鏈。Prometheus FluentD插件提供用於配置Prometheus指標的語法。在我們的案例中,我們將Artifactory和Xray日誌事件轉換為Prometheus的指標。我們已經在這裡設置了Artifactory和Xray FluentD配置示例。
選擇適當的fluent.conf.*文件,然後啟動td-agent。
l fluent.conf.rt – Artifactory版本7
l fluent.conf.rt6 – Artifactory版本6
l fluent.conf.xray – Xray
然後,td-agent在埠24321 / metrics上公開HTTP度量接口。您可以轉到該URL,然後看到類似以下內容的內容。
Prometheus
對於我們的環境,我們使用Prometheus Kubernetes Operator安裝了Prometheus。如果您尚未安裝Prometheus,請點擊此處,了解如何使用操作員安裝Prometheus的說明。使用Prometheus Kubernetes Operator,我們可以配置ServiceMonitors,這使Prometheus可以自動檢測服務的新指標接口。否則,可以按照Prometheus文檔中的描述使用YAML配置文件。以下ServiceMonitor資源配置可以使用Kubernetes 選擇器檢測任何新的指標接口。
該選擇器將使我們的指標服務與標籤應用程式匹配:artifactory-ha. 該服務公開了我們在上面的FluentD Prometheus插件中設置的HTTP指標(Metrics)接口,配置如下圖:
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: servicemonitor-artifactory-ha-primary
labels:
metrics: jfrog
spec:
selector:
matchLabels:
app: artifactory-ha-primary
endpoints:
- port: metrics
interval: 15s
apiVersion: v1
kind: Service
metadata:
labels:
app: artifactory-ha-member
name: artifactory-member-ha-metrics
spec:
ports:
- name: metrics
port: 24231
protocol: TCP
selector:
role : unified-artifactory-ha-member
我們可以在Prometheus Target列表中進一步驗證對度量標準接口服務的自動檢測。這使得Prometheus的配置變得快速簡便,特別是對於可能具有數百臺伺服器的大型系統而言。如下圖
Grafana
現在Prometheus收集了指標,我們現在可以使用Prometheus的可視化層Grafana對其進行可視化。使用Prometheus的PromQL查詢語言,我們可以為儀錶板設置查詢。例如,以下PromQL提供了請求次數最多的倉庫。
topk(10,(repo)的和(jfrog_rt_req {repo!=「」}))
並可以為我們提供以下條形儀表小部件。
我們提供的FluentD配置包含了多個Artifactory和Xray監控指標,您可以查詢和創建自己的儀錶板小部件。一個很好的起點是使用我們的示例儀錶板。此示例儀錶板提供以下圖形小部件,包含如下指標報表:
上傳數據傳輸
下載數據傳輸
熱門下載IP
熱門上傳IP
請求量最大的工件
請求最多的倉庫
數據最多的倉庫
審核用戶
Artifactory 5XX狀態碼
Artifactory 錯誤
Xray 5XX狀態碼
Xray錯誤
拒絕登錄
按IP拒絕操作
按用戶拒絕的操作
如下面三個圖例,展示了Grafana dashboard監控Artifactory 製品庫應用內視。
1. 按時間、按IP下載上傳數據量趨勢/GB(6小時內)
2. 按倉庫,按用戶下載文件次數(6小時內)
總結
在雲原生環境以及DevOps背景下,我們不光要對基礎資源(IAAS層),中間件(PAAS層)進行監控,同時更應該注意應用層監控,這樣才能為開發提供更好的運維甚至是運營支撐。
今天和大家一起介紹了JFrog 內部對應用的監控方案以及案例
有關更多詳細信息,請查看JFrog Log Analytics GitHub,您可以在其中找到更多配置選項和指標信息。
歡迎觀看JFrog傑蛙每周二在線課堂,點擊報名:
https://www.bagevent.com/event/6643470