采集系统上云(loki就是云原生下日志的采集方案) -云顶集团官方网站入口
云顶集团官方网站入口-yd222云顶线路检测中心 发布时间: 2022-02-01 21:02云顶集团官方网站入口-yd222云顶线路检测中心系统上云(loki就是云原生下日志的采集方案)
一、常规玩elk
说到日志采集,估计大家首先想到的就是elk,一个比较成熟的方案。如果是专门针对云原生的,那就把 云顶集团官方网站入口-yd222云顶线路检测中心 稍微改一下
fluentd 可以由 efk 组成。其实以上两种方案没有本质区别,采集器只是一个变化。最终的存储、查询等还在
elasticsearch这一套。
elasticsearch 确实功能丰富,功能非常强大,但也极其昂贵,elasticsearch
全文索引方式对存储和内存的要求比较高,这些代价得到的功能在日常日志管理中并不常用。这些缺点在主机模式下其实是可以容忍的,但在云原生模式下就显得臃肿了。
二、别说武德plg
plg
是promtail loki grafana的统称,是一个非常适合云原生日志的采集方案。格拉法纳
您将熟悉它,一个支持多种数据源的出色可视化框架。最常见的是将prometheus的数据可视化。而loki就是我们今天要讲的主角,这也是grafana
家品,promtail 是 loki 采集器 的官方日志。
与elk相比,这套云顶集团官方网站入口的解决方案非常轻量级,功能强大且易于使用。另外,在显示上使用grafana,减少视觉框架的引入,在显示终端上的统一也有利于用户。
(一) 记录暴发户 loki
loki 是一个受 prometheus 启发的水平可扩展、高可用的多租户日志聚合系统。它被设计成具有成本效益且易于操作。它不索引日志的内容,而是为每个日志流设置一组标签。
与其他日志聚合系统相比,loki
没有日志的全文索引。通过存储压缩的非结构化日志和仅索引元数据,loki 更易于操作且运行成本更低。
使用与 prometheus 相同的标签对日志流进行索引和分组,使您能够使用与 prometheus 相同的标签在指标和日志之间无缝切换。
特别适合存储 kubernetes pod 日志。pod 标签等元数据会被自动爬取和索引。
grafana 原生支持(需要 grafana v6.0 或更高版本)。
这是github上对loki的介绍。可以看出这是一个为云原生构建的轻量级日志聚合系统。社区目前非常活跃。并使用普罗米修斯
类似标签的想法,可以用grafana进行可视化,无论是思维还是使用都非常“云原生”。
(二) ♂️ 儿子 promtail
促销
是loki的官方日志采集器,自己的代码在loki
在项目中。本机支持日志、系统日志、文件和 docker 类型日志。采集器的本质无非就是根据模式找到文件为采集,然后像tail一样*敏*感*词*文件,然后将写入文件的内容发送到存储端promtail
同理,上述类型的本质也是文件,但这些类型文件的格式都是开放稳定的规范,promtail可以提前对它们进行更深层次的分析和封装。
(三) promtail 服务发现
1、 找到文件
作为一个采集器,第一步就是找出文件在哪里,然后就可以做如下采集、标签推送等功能了。普通静态类型的日志很容易找到。可以直接匹配你在配置文件中写的路径信息,比如
promtail中的路径为“/var/log/*.log”,即/var/log目录下所有以.log结尾的后缀文件都可以作为采集的对象。取而代之的是 采集
k8s模式下的登录就麻烦一些了。
首先我们想一想k8s上运行的服务的日志在哪里?
文件类型日志
这自然仍然在您的自定义路径上。如果路径目录未挂载,则它在容器内。如果挂载在host或者pv上,那么host和pv
这种类型的日志promtail不能动态发现,必须手动设置。
标准输出日志
这种日志其实是k8s推荐的日志输出方式。这种日志其实就是我们日常使用的kubectl日志。
你看到的日志,这些日志在主机上的存储路径如下/var/log/pods/
{namespace}_/{pod_id}_uuid/{container_name}/*.log 格式
所以我们需要在 k8s 容器内挂载 /var/log/pods 作为主机路径,以便 promtail 可以访问这些日志。
2、 标记
日志promtail可以访问,但是如何区分这些日志还有一个问题,loki使用了类似prometheus的思路来标注数据。也就是说,如果日志是用 pod 打标签的,那么仅仅依靠这条路径自然是无法知道 pod 上的标签信息是什么。这就是服务发现的用武之地。
promtail的服务发现直接由prometheus的服务发现来完成。熟悉普罗米修斯
同学们一定已经配置好prometheus、kubernetes_sd_configs和relabel_configs的服务发现配置。
这里promtail直接介绍prometheus的代码。与 prometheus 不同,prometheus 向对象请求更多资源,例如 node、ingress、pod 和 deployment。
以此类推,最后拼接的就是metric的request url,promtail请求的对象就是pod,把不在host上的pod过滤掉。
获取到宿主机的pod信息后,根据namespace和pod的id拼接路径。既然这个目录已经挂载到容器中了,那么promtail
您可以将容器的标签与容器的日志相关联。剩下的就是监控和推送。
(四) plg 最佳实践
洛基
官方推荐的最佳实践是使用 damonset 部署 promtail,
/var/lib/pods 目录在 prometheus 的帮助下挂载在容器内
服务发现机制对日志进行动态标记,资源占用和部署维护难度都非常低。这也是主流的云原生日志采集范式。
三、数据栈日志实践
(一) 数据栈日志要求
全局 grep
根据关键字搜索系统中的所有出现
快速定位日志
根据机器名、ip、服务名等条件快速定位日志
主机和云原生统一技术栈
降低使用学习成本并降低系统复杂性
(二)️主机模式
数据栈主机模式日志聚合采用类似于plg dameonset的模式。每个主机部署一个promtail,然后为整个集群部署一组服务器loki
带有可视化侧grafana。
promtail 使用 static_configs 来定义 采集 日志。但promtail
毕竟还是太年轻,定位偏向云原生,所以宿主机的功能还不完善,所以我们做了一些二次开发来满足我们的需求:
1、logtail 模式
本机 promtail 不支持从文件末尾采集。promtail启动时会推送所有被监控文件的内容,这在云原生中问题不大。
在host模式下,如果要监控的日志已经存在,并且内容量很大,promtail
启动会从头开始推送文件的内容,这会导致短时间内大量的日志被推送到loki。
所以最好的办法就是有一个类似filebeat的logtail模式,只在服务启动后推送文件写入的日志。
在这个地方,我们进行了二次开发,增加了logtail模式的开关。如果开关为true,则第一次启动promtail时不会从头开始推送日志。
2、path 支持多路径
原生promtail不支持多路径路径参数,只能写一个表达式,但实际需求可能是同时看业务日志和gc日志。
但它们又是属于同一类别的标签。单一路径的匹配不能同时涵盖两者。不更改代码的云顶集团官方网站入口的解决方案是为其编写另一个目标。
这既乏味又不利于维护。所以我们在这里也对其进行了二次开发。
(三) 云原生模式
传统的云原生模型采用plg的主流模型,但是数据栈作为一个完整的系统交付给企业时存在很多限制,导致demoset模型无法使用。最大的挑战是权限。只有一个
命名空间权限,无法挂载 /var/lib/pods
在这种情况下如何使用 plg?
其实主要的变化就是promtail的使用。这里首先要声明的是,数据栈服务的日志全部输出到文件中。
首先是选择damonset
模式部署或sidecar模式部署,demoset模式的优点是节省资源,缺点是需要权限。与sidecar模型相比,为了适用更严格的交付条件,我们选择采用
边车的模式执行采集。
边车
该模式是在部署时自动为每个服务添加一个日志容器。容器和服务容器共同挂载一个共同的空数据卷。数据卷采集下的日志。
1、promtail如何动态配置数据栈中的标签
通过sidecar模式,我们让日志container和master
容器共享一个日志目录,这样就可以在promtail容器中获取日志文件,但是promtail还不知道采集有哪些日志,以及它们的标签是什么。
因为你可能只想要采集.log的日志,也可能只想要采集.json的日志,或者两个服务的配置可能不一样,所以不能写死,那么如何解决这个问题呢?
促销
在 v2.10 中添加了一个新功能
,即可以在配置文件中引用环境变量。通过这个特性,我们可以把promtail的path参数写成${log_path},然后把服务的logpath设置成环境变量,比如log_path=/var/log/commonlog/* .log
由于我们可以在服务创建时通过环境变量设置路径,所以也可以动态设置标签。那么我们都需要什么维度标签呢?这家不同的公司肯定有不同的维度,但必须遵循的一个原则是可以唯一标识吊舱。大体维度有deployment、podid、node等,这些标签在创建时通过环境变量注入,podid
这些环境变量是使用k8s的向下api注入的。
注意:此处不提供使用 promtail
服务发现机制配置标签,因为promtail的服务发现原理是请求apiserver获取所有pod
的标签。然后使用路径匹配将标签与日志相关联。无需将主机 /var/log/pods 目录挂载到 promtail
,即使获取到标签,也无法与日志关联。
2、如何在数据栈中部署promtail
为每个服务添加一个日志
集装箱人工操作过于繁琐,不利于维护。对原创服务进行抽象最好的方法是注册一个crd,然后写k8s
操作员列出并监视此类型的对象。在创建对象时,它会动态注入一个 logcontainer,以及相应的环境变量,并为其挂载一个公共目录。
因此,当创建 cr 时,promtail 作为 sidecar 注入。并且读取的环境变量是操作者动态设置的环境变量,非常灵活。
优采云采集器是一个根据用户提供的关键词,云端自动采集相关文章并发布到用户网站的网站采集器。它能够自动识别各种网页上的标题、正文等信息,不需要用户编写任何采集规则就可以实现全网采集。采集到内容后,会自动计算内容与所设定的关键词的相关度,只把相关的文章推送给用户。支持标题前缀、关键词自动加粗、插入固定链接、自动提取tag标签、自动内链、自动配图、自动伪原创、内容过滤和替换、电话号码和网址清理、定时采集、百度主动提交等一系列seo功能。用户只需设置好关键词和相关需求,就能实现全托管、零维护的网站内容更新。不限网站数量,不管是单个网站还是大批量站群,都可以非常方便的进行管理。