helm快速生效方法
wget https://get.helm.sh/helm-v3.2.1-linux-amd64.tar.gz
tar -zxvf helm-v3.2.1-linux-amd64.tar.gz
cd linux-amd64/
cp helm /usr/local/bin
chmod a+x /usr/local/bin/helm
在 Kubernetes 上使用FluentBit+Loki +Grafana查看微服務日志
安裝 Loki 和 FluentBit
開始安裝 Loki ,使用 Helm 來快速安裝,首先添加 Chart 倉庫:
# Add the loki helm chart
helm repo add loki https://grafana.github.io/helm-charts
helm repo update
Chart 倉庫配置完成后就可以直接進行安裝了:
# Create the namespace to install loki
$ kubectl create ns loki
# Apply the loki helm chart
$ helm upgrade --install loki --namespace=loki loki/loki --set fluent-bit.enabled=true,promtail.enabled=false,grafana.enabled=true,prometheus.enabled=true,prometheus.alertmanager.persistentVolume.enabled=true,prometheus.server.persistentVolume.enabled=true
Release "loki" does not exist. Installing it now.
NAME: loki
LAST DEPLOYED: Thu Nov 19 11:48:00 2020
NAMESPACE: loki
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
Verify the application is working by running these commands:
kubectl --namespace loki port-forward service/loki 3100
curl http://127.0.0.1:3100/api/prom/label
安裝的時候要注意設置 fluent-bit.enabled=true,這樣就可以使用 FluentBit 作為日志轉發器了;
安裝 FluentBit:
$ helm upgrade --install fluent-bit --namespace=loki loki/fluent-bit --set loki.serviceName=loki.loki.svc.cluster.local
Release "fluent-bit" does not exist. Installing it now.
NAME: fluent-bit
LAST DEPLOYED: Thu Nov 19 11:51:12 2020
NAMESPACE: loki
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
Verify the application is working by running these commands:
kubectl --namespace loki port-forward daemonset/fluent-bit-fluent-bit-loki 2020
curl http://127.0.0.1:2020/api/v1/metrics/prometheus
安裝完成后我們可以使用用 kubectl -n loki get pods 命令查看 loki 命名空間中正在運行的 pod。
kubectl get pods -n loki
安裝 Grafana ,使用 Loki 進行一些日志查詢
helm upgrade --install my-release --namespace=loki loki/grafana
安裝完成后查看 Pod 的狀態:
kubectl get pods -n loki
配置 Loki
這里我們直接使用 port-forward 來訪問 Grafana 服務:
kubectl --namespace loki port-forward $POD_NAME 3000
Navigate to http://localhost:8080 in the browser
在在瀏覽器中打開網址 http://localhost:8080 即可訪問,初次登錄需要輸入用戶名和密碼,用戶名為 admin,對應的密碼可以用下面的命令獲取:
kubectl get secret --namespace loki my-release-grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo
# The password for the admin user
查看loki命名空間中的service
kubectl get svc -n loki
這里因為要讓k8s集群外能訪問到所以將ClusterIP 修改為NodePort類型,具體修改后內容如下
kubectl edit svc my-release-grafana -n loki
spec:
clusterIP: 10.100.87.199
externalTrafficPolicy: Cluster
ports:
- name: service
nodePort: 30060
port: 80
protocol: TCP
targetPort: 3000
修改好以后保存即可。
生效之后就可以在192.168.100.203:30060訪問grafana了。
登錄完成后,我們就可以添加 Loki 作為數據源了,從左側面板,選擇配置 -> 數據源:
在數據源視圖中,點擊添加數據源,然后選擇 Loki。
給數據源起一個名字,然后設置一個 Grafana 實例可以訪問的 Loki URL。我們這里由于 Loki 和 Grafana 都在相同的命名空間中運行,不需要使用任何驗證方案,因此不需要其他配置,單擊 "保存和測試"。您應該會看到一條確認消息 Data source connected and labels found.。
http://loki.loki.svc.cluster.local:3100/
日志查詢
現在 Grafana 已經連接到 Loki 了,接下來我們可以查詢部署到 demo 命名空間的示例應用的日志,我們可以查找錯誤,通過 trace id 查找事務等等。
在 Grafana 頁面中,從側面板中選擇 "探索",選擇上一步中添加的 Loki數據源,在查詢框中,輸入{namespace="default"},然后點擊 "運行查詢",正常我們就可以看到日志返回了。
此外我們還可以添加更多的過濾器和標簽,來縮小我們想要查詢的日志范圍。要查看來自 default 命名空間的 shida-getaway 的日志,可以使用語句 {namespace="default",container="shida-getaway"} 進行查詢,我們也可以查找那些非正常的狀態碼的 http 請求 {namespace="default"} |= "http.resp.status"!= "200"。
我們還可以對來自日志的數據進行一些聚合分析。比如這里面匯總過去5分鐘內 default 命名空間的 http 狀態碼,查詢語句為:sum(count_over_time({namespace="default"} |= "http.resp.status" | json [5m])) by (http_resp_status)
上面的綠線代表 302 狀態碼,黃線代表 200 狀態碼,過去5分鐘內沒有其他狀態碼。關于 Loki 的查詢語言 LogQL 還有很多高級的操作,我們可以通過官方文檔查看更多。
此外查詢歷史記錄還會被保存下來,這樣我們就可以在將來重新訪問一個查詢歷史了,查詢檢查器還可以報告有關查詢執行的指標。
<main>
<article class="baidu_pl">
日志過濾器,更多參考官網
編寫日志流選擇器后,您可以通過編寫搜索表達式來進一步過濾結果。搜索表達式可以只是文本或正則表達式。
查詢示例:
{job="mysql"} |= "error"
{name="kafka"} |~ "tsdb-ops.*io:2003"
{instance=~"kafka-[23]",name="kafka"} != kafka.server:type=ReplicaManager
過濾器運算符可以被鏈接,并將順序過濾表達式-結果日志行將滿足每個過濾器。例如:
{job="mysql"} |= "error" != "timeout"
已實現以下過濾器類型:
- |= 行包含字符串。
- != 行不包含字符串。
- |~ 行匹配正則表達式。
- !~ 行與正則表達式不匹配。
regex表達式接受RE2語法。默認情況下,匹配項區分大小寫,并且可以將regex切換為不區分大小寫的前綴(?i)。
參考資料:https://blog.csdn.net/weixin_39765280/article/details/111248445