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