我们已经有一段时间没有发布《独眼》的新版本了。这并不意味着我们没有在工作,恰恰相反!我们一直忙于做很多改进和增加功能。我们一直在忙着做大量的改进和增加功能。这篇博客将强调自0.3版本以来的许多变化。
让我们从一些好消息开始(github.com/banzaicloud… Eye日志子系统)现在是Rancher的官方日志后端。我们喜欢看到开源项目一起工作,为最终用户提供更好的体验。既然我们谈到了这个话题,让我们来看看日志运营商的一些改进。
自然,更多的用户意味着更多的问题。你可能可以想象,他们提出了大量的功能要求。我们收集了最受欢迎的问题和错误,并进行了改进,使我们的日志操作员更容易使用。
流量和输出状态 🔗︎
配置越复杂,调试问题就越困难。从Logging Operator 3.8开始,所有自定义资源都有一个Status 和一个Problems 字段。它们有什么用处?我们来看看。在一个健康的系统中,clusteroutput 资源的输出应该看起来像下面这样。
$ kubectl get clusteroutput -A
NAMESPACE NAME ACTIVE PROBLEMS
default nullout true
ACTIVE 列表示ClusterOutput 已经成功通过configcheck 并在当前的 fluentd 配置中呈现。当没有错误被报告时,PROBLEMS 列是空的。
看一下另一个例子,在这个例子中,我们有一个不正确的ClusterFlow 。
$ kubectl get clusterflow -o wide
NAME ACTIVE PROBLEMS
all-log true
nullout false 1
你可以看到,nullout Clusterflow 是不活跃的,而且配置有1个问题。为了更深入地挖掘,我们只需要检查对象的状态字段。
$ kubectl get clusterflow nullout -o=jsonpath='{.status}' | jq
{
"active": false,
"problems": [
"dangling global output reference: nullout2"
],
"problemsCount": 1
}
问题是微不足道的;集群上没有nullout2 ClusterOutput 存在。
新的默认S3对象密钥格式 🔗︎
在我们之前的博客中,我们注意到有一个适当的S3对象密钥格式是多么的重要,从冷存储中预热日志。为了避免这一关键属性的错误配置,我们引入了oneeye_format 参数。你可以在我们的文档中阅读更多关于S3输出的内容。
更新了fluentbit、fluentd和插件 🔗︎
自最新发布的日志运营商以来,已经发布了几个错误修复和改进。我们更新并测试了许多插件,以便在记录期间提供无缝体验。
更新了核心组件
- Fluentbit版本从
1.5.4到1.6.4 - Fluentd版本从
1.11.2到1.11.5
更新了Fluentd插件
- fluent-plugin-cloudwatch-logs从
0.11.0到0.11.1 - fluent-plugin-grafana-loki 从
1.2.14到1.2.16 - fluent-plugin-kinesis 从
3.2.3到3.3.0 - fluent-plugin-webhdfs from
1.2.5to1.3.1 - fluent-plugin-elasticsearch from
4.1.2to4.2.2 - fluent-plugin-kafka from
0.14.2to0.15.2 - fluent-plugin-logdna from
0.3.1to0.4.0 - fluent-plugin-newrelic from
1.1.8to1.1.10 - fluent-plugin-prometheus from
1.8.3to1.8.4
这个新功能可以自动将归档日志加载到Elasticsearch中。我们在最近的一篇博文《从冷存储中预热日志》中窥见了这个功能。现在你可以试试了!
One Eye是一个相对年轻的项目,有一个功能导向的路线图。然而,为了有效地使用一个可观察性工具,你需要一个快速和响应的UI。嵌入grafana仪表盘是为用户提供图表的最快方式,开箱即用,但我们对这种仪表盘的加载时间感到纠结。从0.4版本开始,许多嵌入式仪表盘将是原生图形。我相信你会注意到性能上的不同!
指标视图 🔗︎
我们一直在努力建立一个功能性的相关UI,我们一直在逐一实现组件。从0.4版本开始,你可以使用metrics view来查询你的Prometheus度量。这是一种快速访问Prometheus数据点的简化方法。
由于fluentd和fluentbit在将日志摄入Loki时遇到困难,我们增加了对简单Promtail安装的支持。由于其架构的原因,fluentd不能保证消息的排序,所以很多消息被Loki丢弃。 fluentbit最近发布了对其传输日志的改进。此外,他们还发布了Loki的官方版本。仍然有一些改进要做,比如对其重试逻辑的改进。在fluentbit Loki输出足够稳定之前,请放心使用Promtail。在那之后,我们可能会放弃对Promtail的支持,并为fluentbit Loki的输出增加一个配置。
为了让你在定制系统的不同部分时有更多的自由,我们从Grafana Helm图表换成了Grafana operator。当涉及到你动态添加数据源或仪表盘时,操作员给你更多自由。你现在可以享受Grafana操作员提供的所有功能。
随着堆栈越来越复杂,甚至安装流程也开始花费相当多的时间。我们引入了一个简单的安装命令,为开箱即用的监控解决方案安装所有必要的组件。因为配置在很大程度上取决于你所使用的基础设施,我们将引入配置文件来处理不同的环境。这种配置包括不同的警报规则等。
最后但同样重要的是,我们增加了一个日志生成器。这个功能更适合于测试和测试自动化,但几乎不值得一提。目前,它基本上是我们已经写的相同的日志生成器,用于生成Nginx访问的日志格式。如果你是One Eye的新手,这是一个伟大的工具,可以测试不同的过滤器和输出等。
$ one-eye log-generator install
? Select the namespace for your output default
? Generator replica count 1
? Maximum interval between log messages (s) 1
? Minimum interval between log messages (ms) 100
? The amount of log message to emit/s 3
✓ crds ❯ resource is in sync name=observers.one-eye.banzaicloud.io, apiVersion=apiextensions.k8s.io/v1beta1, kind=CustomResourceDefinition
? Please confirm to update component! Yes
记录一个像One Eye这样大的项目可能是一个挑战。为了减轻这个负担,Kubernetes有一个解释命令。然而,我们的观察者的复杂性将意味着我们会生成包括文档的CRD,但是太大。这就是为什么我们把解释命令移植到我们的二进制文件中。
$ one-eye observer explain spec
KIND: Observer
VERSION: one-eye.banzaicloud.io/v1alpha1
RESOURCE: spec
DESCRIPTION:
ObserverSpec defines the desired state of Observer
FIELDS:
certmanager
CertManager component descriptor
clusterName
Custom name for cluster