前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >在 Grafana Loki 中用 Logging operator 来访问 Kubernetes pod 日志

在 Grafana Loki 中用 Logging operator 来访问 Kubernetes pod 日志

原创
作者头像
philentso
修改于 2022-12-28 09:35:04
修改于 2022-12-28 09:35:04
1.1K00
代码可运行
举报
文章被收录于专栏:philentsophilentso
运行总次数:0
代码可运行

在 Grafana Loki 中用 Logging operator 来访问 kubernetes pod 日志

通过前一节 Logging operator 基本了解,本节实战部署日志系统来收集容器应用日志!

本示例介绍如何使用 Logging operator 在 Kubernetes 中收集应用程序和容器日志,以及如何将它们发送到 Grafana Loki.

下图概述了系统的工作原理, Logging operator 从应用程序收集日志,选择要转发到输出的日志,并将选定的日志消息发送到输出:

Logging operator
Logging operator

部署 Loki 和 Grafana

  • Add the chart repositories of Loki and Grafana using the following commands:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ helm repo add grafana https://grafana.github.io/helm-charts
"grafana" has been added to your repositories

$ helm repo add loki https://grafana.github.io/loki/charts
"loki" has been added to your repositories

$ helm repo update
Hang tight while we grab the latest from your chart repositories...
...Unable to get an update from the "testchartmuseum" chart repository (http://192.168.86.129:32155):
        Get "http://192.168.86.129:32155/index.yaml": dial tcp 192.168.86.129:32155: connect: connection refused
...
...Successfully got an update from the "flagger" chart repository
...Successfully got an update from the "argo" chart repository
Update Complete. ⎈Happy Helming!
  • 安装 Loki into the logging namespace:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ helm upgrade --install --create-namespace --namespace logging loki loki/loki

Release "loki" does not exist. Installing it now.
WARNING: This chart is deprecated
NAME: loki
LAST DEPLOYED: Wed Dec 28 03:34:53 2022
NAMESPACE: logging
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
Verify the application is working by running these commands:
  kubectl --namespace logging port-forward service/loki 3100
  curl http://127.0.0.1:3100/api/prom/label


// Grafana Loki Documentation:
https://github.com/grafana/loki/tree/master/production/helm
  • 安装 Grafana into the logging namespace:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ helm upgrade --install --create-namespace --namespace logging grafana grafana/grafana \
--set "datasources.datasources\\.yaml.apiVersion=1" \
 --set "datasources.datasources\\.yaml.datasources[0].name=Loki" \
 --set "datasources.datasources\\.yaml.datasources[0].type=loki" \
 --set "datasources.datasources\\.yaml.datasources[0].url=http://loki:3100" \
 --set "datasources.datasources\\.yaml.datasources[0].access=proxy"

Release "grafana" does not exist. Installing it now.
NAME: grafana
LAST DEPLOYED: Wed Dec 28 03:47:41 2022
NAMESPACE: logging
STATUS: deployed
REVISION: 1
NOTES:
1. Get your 'admin' user password by running:

   kubectl get secret --namespace logging grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo

2. The Grafana server can be accessed via port 80 on the following DNS name from within your cluster:

   grafana.logging.svc.cluster.local

   Get the Grafana URL to visit by running these commands in the same shell:
     export POD_NAME=$(kubectl get pods --namespace logging -l "app.kubernetes.io/name=grafana,app.kubernetes.io/instance=grafana" -o jsonpath="{.items[0].metadata.name}")
     kubectl --namespace logging port-forward $POD_NAME 3000

3. Login with the password from step 1 and the username: admin
#################################################################################
######   WARNING: Persistence is disabled!!! You will lose your data when   #####
######            the Grafana pod is terminated.                            #####
#################################################################################

验证 loki 与 grafana 的 Install:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ kubectl get pods --namespace logging
NAME                       READY   STATUS    RESTARTS   AGE
grafana-698cbcc54b-v6b8t   1/1     Running   0          77s
loki-0                     1/1     Running   0          14m

以上说明都 安装 OK!...

安装过程比较详细,安装参数比较简单,不再一一说明!

部署 Logging operator 和 demo application

Install the Logging operator and a demo application to provide sample log messages.

用 Helm 部署 Logging operator

To install the Logging operator using Helm, complete these steps.

Note:

For the Helm-based installation you need Helm v3.2.1 or later.

. Add the chart repository of the Logging operator using the following commands:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ helm repo add banzaicloud-stable https://kubernetes-charts.banzaicloud.com
"banzaicloud-stable" has been added to your repositories

$ helm repo update
...
...Successfully got an update from the "grafana" chart repository
...Successfully got an update from the "banzaicloud-stable" chart repository
...Successfully got an update from the "bitnami" chart repository
Update Complete. ⎈Happy Helming!

. 将 Logging operator 安装到 logging 命名空间中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ helm upgrade --install --wait --create-namespace --namespace logging logging-operator banzaicloud-stable/logging-operator

Release "logging-operator" has been upgraded. Happy Helming!
NAME: logging-operator
LAST DEPLOYED: Wed Dec 28 05:55:20 2022
NAMESPACE: logging
STATUS: deployed
REVISION: 2
TEST SUITE: None

. 安装演示应用程序及其日志记录定义.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ helm upgrade --install --wait --create-namespace --namespace logging logging-demo banzaicloud-stable/logging-demo \
  --set "loki.enabled=True"

Release "logging-demo" does not exist. Installing it now.
NAME: logging-demo
LAST DEPLOYED: Wed Dec 28 05:59:29 2022
NAMESPACE: logging
STATUS: deployed
REVISION: 1

. Validate your deployment.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ kubectl get pods --namespace logging
NAME                                         READY   STATUS      RESTARTS   AGE
grafana-698cbcc54b-v6b8t                     1/1     Running     0          139m
logging-demo-fluentbit-l7pmd                 1/1     Running     0          3m46s
logging-demo-fluentd-0                       2/2     Running     0          3m46s
logging-demo-fluentd-configcheck-3861c1ba    0/1     Completed   0          7m51s
logging-demo-log-generator-585749975-k6w7s   1/1     Running     0          7m51s
logging-operator-69b48dbf9d-mtbtt            1/1     Running     0          18m
loki-0 

. 创建 logging 资源

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ kubectl -n logging apply -f - <<"EOF"
apiVersion: logging.banzaicloud.io/v1beta1
kind: Logging
metadata:
  name: default-logging-simple
spec:
  fluentd: {}
  fluentbit: {}
  controlNamespace: logging
EOF

logging.logging.banzaicloud.io/default-logging-simple created

$ kubectl get Logging -n logging
NAME                     AGE
default-logging-simple   29s
logging-demo             10m

注意:只能在 controlNamespace 中使用 ClusterOutput 和 ClusterFlow 资源.

. 创建 Loki output 定义

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ kubectl -n logging apply -f - <<"EOF"
apiVersion: logging.banzaicloud.io/v1beta1
kind: Output
metadata:
 name: loki-output
spec:
 loki:
   url: http://loki:3100
   configure_kubernetes_labels: true
   buffer:
     timekey: 1m
     timekey_wait: 30s
     timekey_use_utc: true
EOF

output.logging.banzaicloud.io/loki-output created

$ kubectl get Output  -n logging
NAME                       ACTIVE   PROBLEMS
logging-demo-output-loki   true
loki-output  

注意:在生产环境中,请使用较长的 timekey 间隔以避免生成过多对象

. 创建 flow 资源

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ kubectl -n logging apply -f - <<"EOF"
apiVersion: logging.banzaicloud.io/v1beta1
kind: Flow
metadata:
  name: loki-flow
spec:
  filters:
    - tag_normaliser: {}
    - parser:
        remove_key_name_field: true
        reserve_data: true
        parse:
          type: nginx
  match:
    - select:
        labels:
          app.kubernetes.io/name: log-generator
  localOutputRefs:
    - loki-output
EOF

flow.logging.banzaicloud.io/loki-flow created

. 安装 demo 应用程序

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ kubectl -n logging apply -f - <<"EOF"
apiVersion: apps/v1
kind: Deployment
metadata:
 name: log-generator
spec:
 selector:
   matchLabels:
     app.kubernetes.io/name: log-generator
 replicas: 1
 template:
   metadata:
     labels:
       app.kubernetes.io/name: log-generator
   spec:
     containers:
     - name: nginx
       image: banzaicloud/log-generator:0.3.2
EOF

deployment.apps/log-generator created

. Validate your deployment

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ kubectl get po  -n logging
NAME                                                  READY   STATUS      RESTARTS   AGE
default-logging-simple-fluentbit-cglgc                1/1     Running     0          7m52s
default-logging-simple-fluentd-0                      2/2     Running     0          7m52s
default-logging-simple-fluentd-configcheck-8677d9e7   0/1     Completed   0          119s
grafana-698cbcc54b-v6b8t                              1/1     Running     0          149m
log-generator-cf689c55d-8xrdp                         1/1     Running     0          46s
logging-demo-fluentbit-l7pmd                          1/1     Running     0          13m
logging-demo-fluentd-0                                2/2     Running     0          13m
logging-demo-fluentd-configcheck-d8327387             0/1     Completed   0          119s
logging-demo-log-generator-585749975-k6w7s            1/1     Running     0          17m
logging-operator-69b48dbf9d-mtbtt                     1/1     Running     0          28m
loki-0 

Validate the deployment

Grafana Dashboard

  1. 使用下面的命令来检索 Grafana admin 用户的密码:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ kubectl get secret --namespace logging grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo
a6Uo92.........2tnh
  1. 启用到 Grafana 服务的端口转发.
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 也可设置 svc 为 NodePort 访问
$ kubectl -n logging port-forward svc/grafana 3000:80
  1. Open the Grafana Dashboard: http://localhost:3000
  2. 使用步骤1中检索到的 admin 用户名和密码来登录.
  3. 选择菜单 > Explore, 选择 Data source > Loki, 然后选择 Log labels > namespace > logging, 应该出现一个日志列表.

类似于以下界面:

log_dis
log_dis

注意

如果页面没有得到预期的日志结果,可以在 故障排除 部分找到帮助...

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
asp.net web api 版本控制
版本控制 版本控制的方法有很多,这里提供一种将Odata与普通web api版本控制机制统一的方法,但也可以单独控制,整合控制与单独控制主要的不同是:整合控制通过VersionControllerSelector来选择控制器过滤器,而不是直接选择控制器。 采用此机制来控制版本,应按照如下规则命名控制器: 自定义标识符+版本+Controller 自定义标识符:能体现控制器含义的字符串 版本:表示版本的字符串,例如:V1,V1.0;不建议使用V1.0这样的写法,因为这样控制器名称会相当怪异,如果表示小版本号
甜橙很酸
2018/03/08
1.9K0
asp.net web api 版本控制
Asp.Net Web API 2第六课——Web API路由和动作选择
      Asp.Net Web API第一课——入门http://www.cnblogs.com/aehyok/p/3432158.html
aehyok
2018/08/31
1.1K0
Asp.Net Web API 2第六课——Web API路由和动作选择
Asp.Net Web API(三)
    在Asp.Net Web API中,一个控制器就是一个处理HTTP请求的类,控制器的public方法就被叫做action方法或简单的Action。当Web API接收到一个请求的时候,它将这个请求路由到一个Action。
莫问今朝
2018/08/31
1.9K0
Asp.Net Web API(三)
Asp.Net Web API 2第八课——Web API 2中的属性路由
阅读本文之前,您也可以到Asp.Net Web API 2 系列导航进行查看 http://www.cnblogs.com/aehyok/p/3446289.html
aehyok
2018/08/31
1K0
Asp.Net Web API 2第八课——Web API 2中的属性路由
asp.net web api 构建api帮助文档
1 概要 创建ASP.NET Web Api 时模板自带Help Pages框架。 2 问题 1)使用VS创建Web Api项目时,模板将Help Pages框架自动集成到其中,使得Web Api项目引入了MVC框架开发包,使得项目看起来杂乱。 2)自带的Help Pages框架无法针对Odata控制器生成API文档。 3 问题解决方案 1)独立Help Pages项目,以插件形式添加服务 步骤1,添加类ServiceAssembliesResolver,获得服务集    /// <summary>
甜橙很酸
2018/03/08
1.3K0
打造属于自己的支持版本迭代的Asp.Net Web Api Route
    在目前的主流架构中,我们越来越多的看到web Api的存在,小巧,灵活,基于Http协议,使它在越来越多的微服务项目或者移动项目充当很好的service endpoint。 问题     以Asp.Net Web Api 为例,随着业务的扩展,产品的迭代,我们的web api也在随之变化,很多时候会出现多个版本共存的现象,这个时候我们就需要设计一个支持版本号的web api link,比如: 原先:http://www.test.com/api/{controller}/{id} 如今:http:
脑洞的蜂蜜
2018/02/01
8910
打造属于自己的支持版本迭代的Asp.Net Web Api Route
WebApi的多版本管理
1.多版本管理概念      什么是API的多版本问题?Android等App存在着多版本客户端共存的问题:由于早期没有内置升级机制,用户不会升级,拒绝升级等原因,造成了许多软件的旧版本App也在运行
莫问今朝
2018/08/31
1.5K0
WebApi的多版本管理
ASP.NET Web API编程——控制器
1控制器操作的参数 控制器操作的参数可以是内置类型也可以是自定义类型,无参也是允许的。 2控制器操作返回值 类型 说明 void 操作返回值为void时,Web API返回空HTTP响应,其状态码为204(无内容) HttpResponseMessage Web api会将此返回值直接转换为HTTP消息 IHttpActionResult 接口形式 内置类型或自定义类型 无 2.1返回值为HttpResponseMess
甜橙很酸
2018/04/17
2.5K0
asp.net core之路由
在 ASP.NET Core 中,路由是一个非常重要的概念,它决定了如何将传入的请求映射到相应的处理程序。本文将详细介绍 ASP.NET Core 中的路由系统,包括路由的基本原理、路由模板、路由参数、路由约束等内容,并提供相应的代码示例。
饭勺oO
2023/10/18
3370
asp.net core之路由
ASP.NET MVC5高级编程 ——(5)路由
这章呢,我们开始讲ASP.NET MVC5中的路由机制,在这之前,先提一下URL(Uniform Resource Locator)-- 统一资源定位符。需要注意的是,这里的“资源”这个词,是一个抽象的概念,既可以指一个文件,也可以指一个方法、一个类或是一段代码。由此我们引出了路由的主要用途:
浩Coding
2019/07/03
2.3K0
Asp.net web api 知多少
本系列主要翻译自《ASP.NET MVC Interview Questions and Answers 》- By Shailendra Chauhan,想看英文原版的可访问http://www.dotnettricks.com/free-ebooks自行下载。该书主要分为两部分,ASP.NET MVC 5、ASP.NET WEB API2。本书最大的特点是以面试问答的形式进行展开。通读此书,会帮助你对ASP.NET MVC有更深层次的理解。 由于个人技术水平和英文水平也是有限的,因此错误在所难免,希
圣杰
2018/01/11
5.4K0
Asp.net web api 知多少
Asp.Net Web API 2第五课——Web API路由
    Asp.Net Web API第一课——入门 http://www.cnblogs.com/aehyok/p/3432158.html
aehyok
2018/08/31
1.4K0
Asp.Net Web API 2第五课——Web API路由
【ASP.NET Core 基础知识】--Web API--创建和配置Web API(一)
Web API(Web Application Programming Interface)的重要性在于其在现代软件开发中扮演着关键的角色。以下是一些关于Web API重要性的方面:
喵叔
2024/05/24
1.6K0
【ASP.NET Core 基础知识】--Web API--创建和配置Web API(一)
ASP.NET Web API的Controller是如何被创建的?
Web API调用请求的目标是定义在某个HttpController类型中的某个Action方法,所以消息处理管道最终需要激活目标HttpController对象。调用请求的URI会携带目标HttpController的名称,该名称经过路由解析之后会作为路由变量保存到一个HttpRouteData对象中,而后者会被添加到代表当前请求的HttpRequestMessage对象的属性字典中。ASP.NET Web API据此解析出目标HttpController的类型,进而实现针对目标HttpControlle
蒋金楠
2018/01/15
1.6K0
ASP.NET Web API编程——模型验证与绑定
1.模型验证 使用特性约束模型属性 可以使用System.ComponentModel.DataAnnotations提供的特性来限制模型。 例如,Required特性表示字段值不能为空,Range特性限制数值类型的范围。 对实体类使用特性后,可以使用ModelState.IsValid来判断验证是否通过。 例: 实体: public class DataModel { public int Id { get; set; } public string Field1Nam
甜橙很酸
2018/04/18
3.1K0
ASP.NET Web API编程——模型验证与绑定
【ASP.NET Core 基础知识】--路由和请求处理--Attribute路由
在ASP.NET Core中,路由是将传入的URL请求映射到正确的控制器和操作的方法。Attribute路由是一种基于属性,用于定义路由规则的方式,通过在控制器类和操作方法上应用特定的属性,来定义URL模板。
喵叔
2024/05/24
3110
asp.net web api 使用Odata
路由配置 routePrefix路由前缀,必须含有Odata字符串,否则路由不到Odata控制器。 V1表示版本,可以使用这种方式进行版本控制,也可以使用其他方式。 config.Count().Filter().OrderBy().Expand().Select().MaxTop(null);这样配置使Odata操作符可用(Web Api2的旧版本不必如此设置)。 public static class WebApiConfig { public static void Register(
甜橙很酸
2018/03/08
1.5K0
ASP.NET Core 设置 WebAPI 响应数据的格式—FormatFilter特性篇
在上一篇《ASP.NET Core 设置Web API 响应的数据格式——Produces 特性篇》老周已向各位介绍过 Produces 特性的使用,本文将介绍另一个特性类:FormatFilterAttribute。
郑子铭
2022/03/22
1.7K0
ASP.NET Core 设置 WebAPI 响应数据的格式—FormatFilter特性篇
.Net Core 路由处理
  用户请求接口路由,应用返回处理结果。应用中如何匹配请求的数据呢?为何能如此精确的找到对应的处理方法?今天就谈谈这个路由。路由负责匹配传入的HTTP请求,将这些请求发送到可以执行的终结点。终结点在应用中进行定义并且在应用启动的时候进行配置,也就是在中间件中进行处理。
小世界的野孩子
2021/04/13
7790
【ASP.NET Core 基础知识】--路由和请求处理--路由概念(一)
在Web应用中,路由是一个至关重要的概念,它负责将用户的请求映射到相应的处理程序,以确保正确的页面或资源被呈现给用户。通过将用户请求与适当的处理程序关联起来,使得应用能够以有序和可维护的方式响应用户的操作。
喵叔
2024/01/18
8190
推荐阅读
相关推荐
asp.net web api 版本控制
更多 >
LV.0
这个人很懒,什么都没有留下~
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档