范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

Loki介绍

  Grafana Loki 是一套可以组合成一个功能齐全的日志堆栈组件,与其他日志记录系统不同,Loki 是基于仅索引有关日志元数据的想法而构建的:标签(就像 Prometheus 标签一样)。日志数据本身被压缩然后并存储在对象存储(例如 S3 或 GCS)的块中,甚至存储在本地文件系统上,轻量级的索引和高度压缩的块简化了操作,并显著降低了 Loki 的成本,Loki 更适合中小团队。由于 Loki 使用和 Prometheus 类似的标签概念,所以如果你熟悉 Prometheus 那么将很容易上手,也可以直接和 Grafana 集成,只需要添加 Loki 数据源就可以开始查询日志数据了。
  Loki 还提供了一个专门用于日志查询的 LogQL 查询语句,类似于 PromQL,通过 LogQL 我们可以很容易查询到需要的日志,也可以很轻松获取监控指标。Loki 还能够将 LogQL 查询直接转换为 Prometheus 指标。此外 Loki 允许我们定义有关 LogQL 指标的报警,并可以将它们和 Alertmanager 进行对接。
  Grafana Loki 主要由 3 部分组成:loki: 日志记录引擎,负责存储日志和处理查询promtail: 代理,负责收集日志并将其发送给 lokigrafana: UI 界面概述¶
  Loki 是一组可以组成功能齐全的日志收集堆栈的组件,与其他日志收集系统不同,Loki 的构建思想是仅为日志建立索引标签,而使原始日志消息保持未索引状态。这意味着 Loki 的运营成本更低,并且效率更高。多租户¶
  Loki 支持多租户,以使租户之间的数据完全分离。当 Loki 在多租户模式下运行时,所有数据(包括内存和长期存储中的数据)都由租户 ID 分区,该租户 ID 是从请求中的 X-Scope-OrgID HTTP 头中提取的。 当 Loki 不在多租户模式下时,将忽略 Header 头,并将租户 ID 设置为 fake,这将显示在索引和存储的块中。运行模式¶
  Loki 针对本地运行(或小规模运行)和水平扩展进行了优化,Loki 带有单一进程模式,可在一个进程中运行所有必需的微服务。单进程模式非常适合测试 Loki 或以小规模运行。为了实现水平可伸缩性,可以将 Loki 的服务拆分为单独的组件,从而使它们彼此独立地扩展。每个组件都产生一个用于内部请求的 gRPC 服务器和一个用于外部 API 请求的 HTTP 服务,所有组件都带有 HTTP 服务器,但是大多数只暴露就绪接口、运行状况和指标端点。
  Loki 运行哪个组件取决于命令行中的 -target 标志或 Loki 的配置文件中的 target: 配置。 当 target 的值为 all 时,Loki 将在单进程中运行其所有组件。,这称为单进程或单体模式。 使用 Helm 安装 Loki 时,单体模式是默认部署方式。
  当 target 未设置为 all(即被设置为 querier、ingester、query-frontend 或 distributor),则可以说 Loki 在水平伸缩或微服务模式下运行。
  Loki 的每个组件,例如 ingester 和 distributors 都使用 Loki 配置中定义的 gRPC 监听端口通过 gRPC 相互通信。当以单体模式运行组件时,仍然是这样的,尽管每个组件都以相同的进程运行,但它们仍将通过本地网络相互连接进行组件之间的通信。
  单体模式非常适合于本地开发、小规模等场景,单体模式可以通过多个进程进行扩展,但有以下限制:当运行带有多个副本的单体模式时,当前无法使用本地索引和本地存储,因为每个副本必须能够访问相同的存储后端,并且本地存储对于并发访问并不安全。各个组件无法独立缩放,因此读取组件的数量不能超过写入组件的数量。组件¶
  Distributor¶
  distributor 服务负责处理客户端写入的日志,它本质上是日志数据写入路径中的第一站,一旦 distributor 收到日志数据,会将其拆分为多个批次,然后并行发送给多个 ingester。distributor 通过 gRPC 与 ingester 通信,它们都是无状态的,所以可以根据需要扩大或缩小规模。
  Hashing
  distributor 将一致性Hash和可配置的复制因子结合使用,以确定 ingester 服务的哪些实例应该接收指定的数据流。
  流是一组与租户和唯一标签集关联的日志,使用租户 ID 和标签集对流进行 hash 处理,然后使用哈希查询要发送流的 ingester。
  存储在 Consul/Etcd 中的哈希环被用来实现一致性哈希,所有的 ingester 都会使用自己拥有的一组 Token 注册到哈希环中,每个 Token 是一个随机的无符号 32 位数字,与一组 Token 一起,ingester 将其状态注册到哈希环中,状态 JOINING 和 ACTIVE 都可以接收写请求,而 ACTIVE 和 LEAVING 的 ingester 可以接收读请求。在进行哈希查询时,distributor 只使用处于请求的适当状态的 ingester 的 Token。
  为了进行哈希查找,distributor 找到最小合适的 Token,其值大于日志流的哈希值,当复制因子大于 1 时,属于不同 ingester 的下一个后续 Token(在环中顺时针方向)也将被包括在结果中。
  这种哈希配置的效果是,一个 ingester 拥有的每个 Token 都负责一个范围的哈希值,如果有三个值为 0、25 和 50 的 Token,那么 3 的哈希值将被给予拥有 25 这个 Token 的 ingester,拥有 25 这个 Token 的 ingester 负责1-25的哈希值范围。Ingester¶
  ingester 负责接收 distributor 发送过来的日志数据,存储日志的索引数据以及内容数据。此外 ingester 会验证摄取的日志行是否按照时间戳递增的顺序接收的(即每条日志的时间戳都比前面的日志晚一些),当 ingester 收到不符合这个顺序的日志时,该日志行会被拒绝并返回一个错误。如果传入的行与之前收到的行完全匹配(与之前的时间戳和日志文本都匹配),传入的行将被视为完全重复并被忽略。如果传入的行与前一行的时间戳相同,但内容不同,则接受该日志行,表示同一时间戳有两个不同的日志行是可能的。
  来自每个唯一标签集的日志在内存中被建立成 chunks(块),然后可以根据配置的时间间隔刷新到支持的后端存储。在下列情况下,块被压缩并标记为只读:当前块容量已满(该值可配置)过了太长时间没有更新当前块的内容刷新了
  每当一个数据块被压缩并标记为只读时,一个可写的数据块就会取代它。如果一个 ingester 进程崩溃或突然退出,所有尚未刷新的数据都会丢失,Loki 通常配置为多个副本来降低这种风险。
  当向持久存储刷新时,该块将根据其租户、标签和内容进行哈希处理,这意味着具有相同数据副本的多个 ingester 实例不会将相同的数据两次写入备份存储中,但如果对其中一个副本的写入失败,则会在备份存储中创建多个不同的块对象。
  WAL
  上面我们提到了 ingester 将数据临时存储在内存中,如果发生了崩溃,可能会导致数据丢失,而 WAL 就可以帮助我们来提高这方面的可靠性。
  在计算机领域,WAL(Write-ahead logging,预写式日志)是数据库系统提供原子性和持久化的一系列技术。
  在使用 WAL 的系统中,所有的修改都先被写入到日志中,然后再被应用到系统状态中。通常包含 redo 和 undo 两部分信息。为什么需要使用 WAL,然后包含 redo 和 undo 信息呢?举个例子,如果一个系统直接将变更应用到系统状态中,那么在机器断电重启之后系统需要知道操作是成功了,还是只有部分成功或者是失败了(为了恢复状态)。如果使用了 WAL,那么在重启之后系统可以通过比较日志和系统状态来决定是继续完成操作还是撤销操作。
  redo log 称为重做日志,每当有操作时,在数据变更之前将操作写入 redo log,这样当发生断电之类的情况时系统可以在重启后继续操作。undo log 称为撤销日志,当一些变更执行到一半无法完成时,可以根据撤销日志恢复到变更之间的状态。
  Loki 中的 WAL 记录了传入的数据,并将其存储在本地文件系统中,以保证在进程崩溃的情况下持久保存已确认的数据。重新启动后,Loki 将重放日志中的所有数据,然后将自身注册,准备进行后续写操作。这使得 Loki 能够保持在内存中缓冲数据的性能和成本优势,以及持久性优势(一旦写被确认,它就不会丢失数据)。Querier¶
  Querier 接收日志数据查询、聚合统计请求,使用 LogQL 查询语言处理查询,从 ingester 和长期存储中获取日志。
  查询器查询所有 ingester 的内存数据,然后再到后端存储运行相同的查询。由于复制因子,查询器有可能会收到重复的数据。为了解决这个问题,查询器在内部对具有相同纳秒时间戳、标签集和日志信息的数据进行重复数据删除。Query Frontend¶
  Query Frontend 查询前端是一个可选的服务,可以用来加速读取路径。当查询前端就位时,将传入的查询请求定向到查询前端,而不是 querier, 为了执行实际的查询,群集中仍需要 querier 服务。
  查询前端在内部执行一些查询调整,并在内部队列中保存查询。querier 作为 workers 从队列中提取作业,执行它们,并将它们返回到查询前端进行汇总。querier 需要配置查询前端地址,以便允许它们连接到查询前端。
  查询前端是无状态的,然而,由于内部队列的工作方式,建议运行几个查询前台的副本,以获得公平调度的好处,在大多数情况下,两个副本应该足够了。
  队列
  查询前端的排队机制用于:确保可能导致 querier 出现内存不足(OOM)错误的查询在失败时被重试。这样管理员就可以为查询提供稍低的内存,或者并行运行更多的小型查询,这有助于降低总成本。通过使用先进先出队列(FIFO)将多个大型请求分配到所有 querier 上,以防止在单个 querier 中进行多个大型请求。通过在租户之间公平调度查询。
  分割
  查询前端将较大的查询分割成多个较小的查询,在下游 querier 上并行执行这些查询,并将结果再次拼接起来。这可以防止大型查询在单个查询器中造成内存不足的问题,并有助于更快地执行这些查询。
  缓存
  查询前端支持缓存查询结果,并在后续查询中重复使用。如果缓存的结果不完整,查询前端会计算所需的子查询,并在下游 querier 上并行执行这些子查询。查询前端可以选择将查询与其 step 参数对齐,以提高查询结果的可缓存性。读取路径¶
  日志读取路径的流程如下所示:查询器收到一个对数据的 HTTP 请求。查询器将查询传递给所有 ingester。ingester 收到读取请求,并返回与查询相匹配的数据。如果没有 ingester 返回数据,查询器会从后端存储加载数据,并对其运行查询。查询器对所有收到的数据进行迭代和重复计算,通过 HTTP 连接返回最后一组数据。写入路径¶
  整体的日志写入路径如下所示:distributor 收到一个 HTTP 请求,以存储流的数据。每个流都使用哈希环进行哈希操作。distributor 将每个流发送到合适的 ingester 和他们的副本(基于配置的复制因子)。每个 ingester 将为日志流数据创建一个块或附加到一个现有的块上。每个租户和每个标签集的块是唯一的。安装¶
  首先添加 Loki 的 Chart 仓库:$ helm repo add grafana https://grafana.github.io/helm-charts $ helm repo update
  获取 loki-stack 的 Chart 包并解压:$ helm pull grafana/loki-stack --untar --version 2.6.4
  loki-stack 这个 Chart 包里面包含所有的 Loki 相关工具依赖,在安装的时候可以根据需要开启或关闭,比如我们想要安装 Grafana,则可以在安装的时候简单设置 --set grafana.enabled=true 即可。默认情况下 loki、promtail 是自动开启的,也可以根据我们的需要选择使用 filebeat 或者 logstash,同样在 Chart 包根目录下面创建用于安装的 Values 文件:# values-prod.yaml loki:   enabled: true   replicas: 1   rbac:     pspEnabled: false   persistence:     enabled: true     storageClassName: local-path  promtail:   enabled: true   rbac:     pspEnabled: false  grafana:   enabled: true   service:     type: NodePort   rbac:     pspEnabled: false   persistence:     enabled: true     storageClassName: local-path     accessModes:       - ReadWriteOnce     size: 1Gi
  然后直接使用上面的 Values 文件进行安装即可:$ helm upgrade --install loki -n logging -f values-prod.yaml . Release "loki" does not exist. Installing it now. NAME: loki LAST DEPLOYED: Tue Jun 14 14:45:50 2022 NAMESPACE: logging STATUS: deployed REVISION: 1 NOTES: The Loki stack has been deployed to your cluster. Loki can now be added as a datasource in Grafana.  See http://docs.grafana.org/features/datasources/loki/ for more detail.
  安装完成后可以查看 Pod 的状态:$ kubectl get pods -n logging NAME                            READY   STATUS    RESTARTS   AGE loki-0                          1/1     Running   0          5m19s loki-grafana-5f9df99f6d-8rwbz   2/2     Running   0          5m19s loki-promtail-ptxxl             1/1     Running   0          5m19s loki-promtail-xc55z             1/1     Running   0          5m19s loki-promtail-zg9tv             1/1     Running   0          5m19s
  这里我们为 Grafana 设置的 NodePort 类型的 Service:$ kubectl get svc -n logging NAME            TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE loki            ClusterIP   10.104.186.9            3100/TCP       5m34s loki-grafana    NodePort    10.110.58.196           80:31634/TCP   5m34s loki-headless   ClusterIP   None                    3100/TCP       5m34s
  可以通过 NodePort 端口 31634 访问 Grafana,使用下面的命令获取 Grafana 的登录密码:$ kubectl get secret --namespace logging loki-grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo
  使用用户名 admin 和上面的获取的密码即可登录 Grafana,由于 Helm Chart 已经为 Grafana 配置好了 Loki 的数据源,所以我们可以直接获取到日志数据了。点击左侧 Explore 菜单,然后就可以筛选 Loki 的日志数据了:
  我们使用 Helm 安装的 Promtail 默认已经帮我们做好了配置,已经针对 Kubernetes 做了优化,我们可以查看其配置:$ kubectl get secret loki-promtail -n logging -o json | jq -r ".data."promtail.yaml"" | base64 --decode server:   log_level: info   http_listen_port: 3101  client:   url: http://loki:3100/loki/api/v1/push   positions:   filename: /run/promtail/positions.yaml  scrape_configs:   # See also https://github.com/grafana/loki/blob/master/production/ksonnet/promtail/scrape_config.libsonnet for reference   - job_name: kubernetes-pods     pipeline_stages:       - cri: {}     kubernetes_sd_configs:       - role: pod     relabel_configs:       - source_labels:           - __meta_kubernetes_pod_controller_name         regex: ([0-9a-z-.]+?)(-[0-9a-f]{8,10})?         action: replace         target_label: __tmp_controller_name       - source_labels:           - __meta_kubernetes_pod_label_app_kubernetes_io_name           - __meta_kubernetes_pod_label_app           - __tmp_controller_name           - __meta_kubernetes_pod_name         regex: ^;*([^;]+)(;.*)?$         action: replace         target_label: app       - source_labels:           - __meta_kubernetes_pod_label_app_kubernetes_io_component           - __meta_kubernetes_pod_label_component         regex: ^;*([^;]+)(;.*)?$         action: replace         target_label: component       - action: replace         source_labels:         - __meta_kubernetes_pod_node_name         target_label: node_name       - action: replace         source_labels:         - __meta_kubernetes_namespace         target_label: namespace       - action: replace         replacement: $1         separator: /         source_labels:         - namespace         - app         target_label: job       - action: replace         source_labels:         - __meta_kubernetes_pod_name         target_label: pod       - action: replace         source_labels:         - __meta_kubernetes_pod_container_name         target_label: container       - action: replace         replacement: /var/log/pods/*$1/*.log         separator: /         source_labels:         - __meta_kubernetes_pod_uid         - __meta_kubernetes_pod_container_name         target_label: __path__       - action: replace         regex: true/(.*)         replacement: /var/log/pods/*$1/*.log         separator: /         source_labels:         - __meta_kubernetes_pod_annotationpresent_kubernetes_io_config_hash         - __meta_kubernetes_pod_annotation_kubernetes_io_config_hash         - __meta_kubernetes_pod_container_name         target_label: __path__ Ingress日志展示¶

辅警干了两年了,还有干下去的必要吗?辅警就是警察队伍里的临时工,属于打杂端水的二等员工。至于题主工作两年后,还有没有必要干下去,这还需要从三方面来分析。第一从辅警的发展来说,辅警真还没啥前途可言。尽管现在辅警的招聘条领导要把我的岗位调成管理岗,把副高给另一个同事让出来,合理吗?不合理,坚决抵制!从你的描述来看,你不属于双肩挑干部,没有管理职务。那么你最好维持现状。首先,专技七级就和六级职员(副处)待遇差不多,专技六级已经介于五级职员和六级职员之间了,专技为什么有些人品好能力强的人,却不被领导看好或重用?有时现实就是那么打脸的,人品好,能力强的人一般都有傲气,不屑于吹牛拍马,但其实guan场也好和企业也好,这样的人都不大受领导重视重用。一个最简单的评判标准看贪官的数量和比例!抓了那在创业公司上班3个月,每天5点准时下班,全办公室都很懒散,我总觉得不踏实,为什么?这个应该是老板的目标方向没明确让你们看不到希望前景在哪里一般创业公司都很忙碌的,有明确的目标前进给你讲个故事,刚毕业的那会儿去了一家创业公司,满怀激动心情想要大干一番的时候。却发现事业单位编制分为哪几种?哪种事业单位待遇最好?感谢悟空邀请。目前,我国的事业单位编制主要分为以下几种一是参照公务员法管理的事业单位(简称参公单位),这种事业单位承担部分行政职能,招录任用晋升以及工资待遇等各方面都是参照公务员法签订事业单位聘用合同这个属于事业编吗?签订事业单位聘用合同这个属于事业编吗?是否是属于事业编,这个不能只是看聘用合同,而是要按照事业单位人事管理条例,即国务院令第652号规定的内容来作为衡量的标准,下面和大家分享我的个我儿子在协和学院博士毕业,从本科到现在共十一年,能进三甲医院吗?北京协和医学院,现在是卫生部直属的唯一高校,1919年开办临床医学本博八年制,是我国最早开设临床医学八年制的高校,开启了我国培养医学精英人才的先河。北京协和医学院一直秉承着高进优教有些地区高考中考监考酬金是可观的,为什么老师们却不愿意监考呢?本人老师,我来回答你吧。第一高考中考监考酬金很低的。我们这里很多年都是150元,忙碌三天仅仅150元,每天50元,很高吗?去年刚刚涨,每天100元,也不过300元,很高吗?老师们带想获得大学保研资格,大一大二大三大四各阶段分别需要准备什么?要想保研,每个学校保研的标准和条件其实是不一样的,我给您宏观的做个介绍1学习成绩如果想保研,成绩是很重要的一个参考标准,而且不仅要在班级的排名靠前,更要在本专业的排名靠前,因为保研银行行业哪些职位比较有前途?在银行上班,有没有前途不是由职位决定的,而是由你建立的各种人脉关系决定的。这种人脉关系包括银行内部和外部两方面的关系。内部关系这个是最为直接的人脉关系,直接决定了你的前途。这种人脉研究生有必要为了奖学金发很多垃圾期刊吗?我说说我们学校这次评奖学金吧!这次也经历了反反复复几次评选,最终才敲定下来!我们学校奖学金覆盖率90一等10(8000)二等30(5000)三等60(3000)可以看出我们这个对比
厚睦莱分享对眼睛好的食物每天科普一个有用的知识,身处短视频火热的时代,人人都刷起了它,戴眼镜的人越来越多,度数越来越深,心情有点EMO了,让我们从日常做起,可以多摄入对眼睛好的食物,请拿起小本子记起来哦!威少3换2交易离队,单打王有望加盟湖人,新首发曝光NBA名记BillSimmons在自己的播客节目中,建议洛杉矶湖人与公牛队达成一笔3换2的交易送走威少。具体的交易方案为湖人队送出威少2027和2029年的两个首轮选秀权,从公牛队乌拉圭主帅出局因对阵葡萄牙时被判点,那不是一个点球直播吧12月3日讯世界杯小组赛H组第3轮,乌拉圭20战胜加纳,但因进球数的劣势排名小组第三,无缘出线。赛后,乌拉圭主帅迭戈阿隆索接受了采访。谈到小组出局,迭戈阿隆索说道我们的出局是NBA官方mvp排行榜更新塔图姆超越东契奇升至第一今日NBA官方实时mvp排行榜出炉,联盟第一凯尔特人的两位核心塔图姆升至第一杰伦布朗首次进入前十,斯蒂芬库里第六。塔图姆凯尔特人31。6分7。8板4。5助凯尔特人如今五连胜,18胜C罗助攻金英权全场获评5。6分,韩国绝处逢生逆转晋级世界杯看球笔记第13夜加纳0比2乌拉圭韩国2比1葡萄牙孙兴慜(右)在比赛后庆祝。新华社发绝境逢生,韩国队成亚洲第三支晋级淘汰赛的队伍!北京时间12月3日凌晨,在卡塔尔世界杯H组最后别了,德国队别了,你们的价值观2022世界杯德国无缘16强继2018俄罗斯世界杯之后,德国队又一次倒在小组赛。做为多年德国队的球迷,欣赏的是德国人的团队协作永不言弃钢铁意志,但是这届德国队让人失望。在还没来卡塔猛料!35岁詹姆斯终有绯闻,被曝出轨23岁模特北京时间5月3日,詹姆斯一直保持良好的个人形象,他和妻子萨瓦娜很早就认识,在萨瓦娜仅16岁的时候,两人便认识。而两人如今已经有3个小孩,夫妻两人至今没有传出过不和的消息,感情非常好解析葡萄牙12韩国C罗受限难进球,奇兵黄喜灿登场杀死比赛这种情况是我只能在电视上看到的剧情,而现在我自己就是当事人之一!韩国队21逆转葡萄牙队后,门将金承奎在接受采访时依然难掩激动。此役葡萄牙队开场6分钟便打破僵局,在场面上也始终压制韩卡塔尔世界杯裁判快成摆设但中国裁判仍无法成为主裁本届世界杯开始至今,小组赛全部结束了,全世界球迷发现,除了参赛各国球队的精彩比赛外,足球比赛中的争议问题一直存在,例如日本队的那粒关键球出不出界?是否十二码精确度到几厘米身位的越位三消息!广东秘密签大外援,周琦家中被盗,CBA第二阶段比赛延期广东队秘密签大外援上赛季广东队以第五名的成绩进入季后赛,先将天津斩落马下,八强遇到浙江20横扫,在分区决赛惨遭辽宁30被横扫。自此广东王朝落下帷幕,且广东队出现青黄不接的局面。休赛16强出炉!两大历史纪录诞生,最强淘汰赛来袭,八强呼之欲出卡塔尔世界杯16强全部出炉,所有世界排名靠前球队,除了无缘小组出线的德国比利时和掉落小组第二的西班牙,所有强队都以小组头名的傲人战绩出线,最强淘汰赛即将来袭!卡塔尔世界杯创造两大历