我的项目部署在k8s环境中,我们使用Fluent Bit将日志发送到ES。我需要将 java stacktrace 作为一个文档发送。因此,我使用了流利的位多行解析器,但我无法让它工作。
方法一:
根据大量教程和文档,我按如下方式配置了 Fluent Bit。
[INPUT]
Name tail
Tag kube.test.*
Path /var/log/containers/*.log
DB /var/log/test.db
Mem_Buf_Limit 50MB
Refresh_Interval 10
Multiline On
Parser_Firstline multine_parser_first_line
[PARSER]
Name multine_parser_first_line
Format regex
Regex /^(?<time>(\d)+(-\d+)+(\S)+\W(\S)+)(?<message>.*)/
Time_Key time
Time_Format %Y-%m-%d %H:%M:%S.%L
Time_Keep On
Run Code Online (Sandbox Code Playgroud)
方法2:
根据Fluentbit with mycat multiline parsing中的回答使用了两个解析器
[INPUT]
Name tail
Tag kube.test.*
Path /var/log/containers/*.log
DB /var/log/test.db
Mem_Buf_Limit 50MB
Refresh_Interval 10
Multiline On
Parser_Firstline multine_parser_first_line
Parser_1 error_log_parser
[PARSER]
Name multine_parser_first_line
Format regex
Regex (\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2}).(\d{3})
Time_Key time
Time_Format %Y-%m-%d %H:%M:%S.%L …Run Code Online (Sandbox Code Playgroud) 有没有办法排除某些命名空间fluent-bit?我想排除某些命名空间,因此fluent-bit不会将在这些命名空间中创建的所有日志转发到 ELK。
除了为该命名空间中的每个 pod 添加注释之外,还有其他方法吗?我知道您可以通过 kubectl 更新命名空间中的所有 pod 注释。
kubectl annotate pods --namespace=pks-system --all fluentbit.io/exclude='true'
有时我们会发现ES中缺少一些日志,而在Kubernetes中却可以看到它们。
我只能在日志中找到问题,指出 kubernetes 解析器的问题,在 fluid-bit 日志中包含以下内容:
[2020/11/22 09:53:18] [debug] [filter:kubernetes:kubernetes.1] could not merge JSON log as requested
一旦我们将 kubernetes 过滤器的“Merge_Log”选项配置为“Off”,问题似乎就消失了(至少在流利位日志中不再出现“警告/错误”)。但是,我们当然会失去一个重要的功能,例如实际上拥有除“消息”本身之外的字段/值。
除此之外,在 fluid-bit 或 elasticsearch 中没有其他错误/警告消息,这就是我主要怀疑的原因。日志(info中的log_level)填充为:
k --context contexto09 -n logging-system logs -f -l app=fluent-bit --max-log-requests 31 | grep -iv "\[ info\]"
[2020/11/22 19:45:02] [ warn] [engine] failed to flush chunk '1-1606074289.692844263.flb', retry in 25 seconds: task_id=31, input=appstream > output=es.0
[2020/11/22 19:45:02] [ warn] [engine] failed to flush chunk '1-1606074208.938295842.flb', retry in 25 seconds: task_id=67, input=appstream > output=es.0
[2020/11/22 19:45:08] [ …Run Code Online (Sandbox Code Playgroud) 我最近一直在阅读有关 Fluentd 和 Fluent-bit 作为日志统一和收集工具的内容。文档说它支持一些 Linux 发行版,但我找不到任何关于 Android 的参考 - 无论是支持还是不支持。
知道 Fluent-bit 是否可以编译在 Android 上运行吗?或者,是否还有其他工具,例如 Android 版 Fluent-bit?
谢谢
我试图在 Fluent-bit 配置中找到一种方法来告诉/强制 ES 以结构化的方式存储纯 json 格式的日志(下面的日志位来自 docker stdout/stderror) - 请参阅底部的图像以获得更好的解释。例如,除了(或连同)将日志存储为log字段下的纯 json 条目之外,我想单独存储每个属性,如red所示。
过滤器和解析器的文档真的很差而且不清楚。最重要的是,forward输入没有“解析器”选项。我试过json/docker/regex解析器,但没有运气。如果我必须使用正则表达式,我的正则表达式就在这里。目前使用 ES (7.1)、Fluent-bit (1.1.3) 和 Kibana (7.1) - 而不是 Kubernetes。
如果有人可以指导我举一个例子或举一个例子,我将不胜感激。
谢谢
{
"_index": "hello",
"_type": "logs",
"_id": "T631e2sBChSKEuJw-HO4",
"_version": 1,
"_score": null,
"_source": {
"@timestamp": "2019-06-21T21:34:02.000Z",
"tag": "php",
"container_id": "53154cf4d4e8d7ecf31bdb6bc4a25fdf2f37156edc6b859ba0ddfa9c0ab1715b",
"container_name": "/hello_php_1",
"source": "stderr",
"log": "{\"time_local\":\"2019-06-21T21:34:02+0000\",\"client_ip\":\"-\",\"remote_addr\":\"192.168.192.3\",\"remote_user\":\"\",\"request\":\"GET / HTTP/1.1\",\"status\":\"200\",\"body_bytes_sent\":\"0\",\"request_time\":\"0.001\",\"http_referrer\":\"-\",\"http_user_agent\":\"curl/7.38.0\",\"request_id\":\"91835d61520d289952b7e9b8f658e64f\"}"
},
"fields": {
"@timestamp": [
"2019-06-21T21:34:02.000Z"
]
},
"sort": [
1561152842000
]
} …Run Code Online (Sandbox Code Playgroud) 我在 k8s 中有一个相当简单的 Apache 部署,使用 Fluent-bit v1.5 作为日志转发器。我的设置与下面存储库中的设置几乎相同。我正在运行 AWS EKS 并将日志输出到 AWS ElasticSearch Service。
https://github.com/ Fluent/ Fluent-bit-kubernetes-logging
ConfigMap 位于: https: //github.com/ Fluent/ Fluent-bit-kubernetes-logging/blob/master/output/elasticsearch/ Fluent-bit-configmap.yaml
Apache 访问 (-> /dev/stdout) 和错误 (-> /dev/stderr) 日志行均位于节点上的同一容器日志文件中。我遇到的问题是 fluid-bit 似乎无法自动检测要使用哪个解析器,我不确定它是否应该这样做,而且我们只能在部署的注释部分指定一个解析器,我已经指定了 apache 。因此,最终,写入同一文件但来自 stderr 的错误日志行不会被解析。我应该将日志从 Fluent-bit 发送到 Fluentd 来处理错误文件(假设 Fluentd 可以处理这个问题),还是应该以某种方式仅将错误行抽回到 Fluent-Bit 中进行解析?
我错过了什么吗?
谢谢!
我有2个集群
Server Version: version.Info{Major:"1", Minor:"20+", GitVersion:"v1.20.11-eks-f17b81", GitCommit:"f17b810c9e5a82200d28b6210b458497ddfcf31b", GitTreeState:"clean", BuildDate:"2021-10-15T21:46:21Z", GoVersion:"go1.15.15", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"21", GitVersion:"v1.21.6-gke.1500", GitCommit:"7ce0f9f1939dfc1aee910732e84cba03840df91e", GitTreeState:"clean", BuildDate:"2021-11-17T09:30:26Z", GoVersion:"go1.16.9b7", Compiler:"gc", Platform:"linux/amd64"}
我用来fluent-bit尾部容器日志文件并将日志推送到elasticsearch
在第一个 k8s 集群中,容器日志的格式为:
{"log":"{\"method\":\"GET\",\"path\":\"/healthz\",\"format\":\"*/*\",\"controller\":\"Api::ApplicationController\",\"action\":\"healthz\",\"status\":204,\"duration\":0.61,\"view\":0.0,\"request_id\":\"4d54cc06-08d2-4487-b2d9-fabfb2286e89\",\"headers\":{\"SCRIPT_NAME\":\"\",\"QUERY_STRING\":\"\",\"SERVER_PROTOCOL\":\"HTTP/1.1\",\"SERVER_SOFTWARE\":\"puma 5.4.0 Super Flight\",\"GATEWAY_INTERFACE\":\"CGI/1.2\",\"REQUEST_METHOD\":\"GET\",\"REQUEST_PATH\":\"/healthz\",\"REQUEST_URI\":\"/healthz\",\"HTTP_VERSION\":\"HTTP/1.1\",\"HTTP_HOST\":\"192.168.95.192:80\",\"HTTP_USER_AGENT\":\"kube-probe/1.20+\",\"HTTP_ACCEPT\":\"*/*\",\"HTTP_CONNECTION\":\"close\",\"SERVER_NAME\":\"192.168.95.192\",\"SERVER_PORT\":\"80\",\"PATH_INFO\":\"/healthz\",\"REMOTE_ADDR\":\"192.168.79.131\",\"ROUTES_19640_SCRIPT_NAME\":\"\",\"ORIGINAL_FULLPATH\":\"/healthz\",\"ORIGINAL_SCRIPT_NAME\":\"\"},\"params\":{\"controller\":\"api/application\",\"action\":\"healthz\"},\"response\":{},\"custom\":{},\"@version\":\"dutycast-b2c-backend-v1.48.0-rc.5\",\"@timestamp\":\"2022-03-04T11:16:14.236Z\",\"message\":\"[204] GET /healthz (Api::ApplicationController#healthz)\"}\n","stream":"stdout","time":"2022-03-04T11:16:14.238067813Z"}
Run Code Online (Sandbox Code Playgroud)
它是 json 格式,我可以使用fluent-bit解析器轻松解析
我对第二个 k8s 集群执行相同的行为,但容器日志的格式是:
2022-03-04T11:19:24.050132912Z stdout F {"method":"GET","path":"/healthz","format":"*/*","controller":"Public::PublicPagesController","action":"healthz","status":204,"duration":0.52,"view":0.0,"request_id":"bcc799bb-5e5c-4758-9169-ecebb04b801f","headers":{"SCRIPT_NAME":"","QUERY_STRING":"","SERVER_PROTOCOL":"HTTP/1.1","SERVER_SOFTWARE":"puma 5.6.2 Birdie's Version","GATEWAY_INTERFACE":"CGI/1.2","REQUEST_METHOD":"GET","REQUEST_PATH":"/healthz","REQUEST_URI":"/healthz","HTTP_VERSION":"HTTP/1.1","HTTP_HOST":"10.24.0.22:3000","HTTP_USER_AGENT":"kube-probe/1.21","HTTP_ACCEPT":"*/*","HTTP_CONNECTION":"close","SERVER_NAME":"10.24.0.22","SERVER_PORT":"3000","PATH_INFO":"/healthz","REMOTE_ADDR":"10.24.0.1","ROUTES_71860_SCRIPT_NAME":"","ORIGINAL_FULLPATH":"/healthz","ORIGINAL_SCRIPT_NAME":"","ROUTES_71820_SCRIPT_NAME":""},"params":{"controller":"public/public_pages","action":"healthz"},"custom":null,"request_time":"2022-03-04T11:19:24.048+00:00","process_id":8,"@version":"vcam-backend-v0.1.0-rc24","response":"#\u003cActionDispatch::Response:0x00007f9d1f600888 @mon_data=#\u003cMonitor:0x00007f9d1f600838\u003e, @mon_data_owner_object_id=144760, @header={\"X-Frame-Options\"=\u003e\"ALLOW-FROM https://vietcapital.com.vn\", \"X-XSS-Protection\"=\u003e\"0\", \"X-Content-Type-Options\"=\u003e\"nosniff\", \"X-Download-Options\"=\u003e\"noopen\", \"X-Permitted-Cross-Domain-Policies\"=\u003e\"none\", \"Referrer-Policy\"=\u003e\"strict-origin-when-cross-origin\"}, @stream=#\u003cActionDispatch::Response::Buffer:0x00007f9d1f6045a0 @response=#\u003cActionDispatch::Response:0x00007f9d1f600888 ...\u003e, @buf=[\"\"], @closed=false, @str_body=nil\u003e, @status=204, @cv=#\u003cMonitorMixin::ConditionVariable:0x00007f9d1f600720 @monitor=#\u003cMonitor:0x00007f9d1f600838\u003e, @cond=#\u003cThread::ConditionVariable:0x00007f9d1f6006f8\u003e\u003e, @committed=false, @sending=false, @sent=false, @cache_control={}, @request=#\u003cActionDispatch::Request GET \"http://10.24.0.22:3000/healthz\" for 10.24.0.1\u003e\u003e","@timestamp":"2022-03-04T11:19:24.049Z","message":"[204] …Run Code Online (Sandbox Code Playgroud) 在 Kubernetes (Minikube) 上使用 EFK 堆栈。有一个使用 Serilog 的 asp.net 核心应用程序以 Json 的形式写入控制台。日志确实会发送到 Elasticsearch,但它们到达未解析的字符串,进入“日志”字段,这就是问题所在。
这是控制台输出:
{
"@timestamp": "2019-03-22T22:08:24.6499272+01:00",
"level": "Fatal",
"messageTemplate": "Text: {Message}",
"message": "Text: \"aaaa\"",
"exception": {
"Depth": 0,
"ClassName": "",
"Message": "Boom!",
"Source": null,
"StackTraceString": null,
"RemoteStackTraceString": "",
"RemoteStackIndex": -1,
"HResult": -2146232832,
"HelpURL": null
},
"fields": {
"Message": "aaaa",
"SourceContext": "frontend.values.web.Controllers.HomeController",
"ActionId": "0a0967e8-be30-4658-8663-2a1fd7d9eb53",
"ActionName": "frontend.values.web.Controllers.HomeController.WriteTrace (frontend.values.web)",
"RequestId": "0HLLF1A02IS16:00000005",
"RequestPath": "/Home/WriteTrace",
"CorrelationId": null,
"ConnectionId": "0HLLF1A02IS16",
"ExceptionDetail": {
"HResult": -2146232832,
"Message": "Boom!",
"Source": null,
"Type": "System.ApplicationException"
}
}
} …Run Code Online (Sandbox Code Playgroud) 我正在尝试从尾部输入中过滤出一些记录到流畅位。但这似乎不起作用。从日志文件中,我需要从所有具有键值“log”的记录中排除 1) 具有 1 个或多个数字后跟空格的记录 2) 行中任何位置具有值“Series”的记录 3) 具有值“transacttime”的记录' 线路上的任何地方。
它们可以是相同或不同的记录
[INPUT]
Name tail
Path /mnt/volume_nyc3_03/xenfix*.out
Tag genfix
DB /mnt/volume_nyc3_03/ggantel-gf.db
[FILTER]
Name grep
Match *
Exclude log ^[0-9]*\
Exclude log *Series*
Exclude log *transacttime*
[OUTPUT]
Name pulsar
Match *
Host somerandom-id.us-east-1.elb.amazonaws.com
Port 6650
Topic persistent://public/default/genfixlogs
[OUTPUT]
Name stdout
Match genfix
Run Code Online (Sandbox Code Playgroud)
这不会从输出中排除任何记录,如下所示
{"log":"0 1"}
----- got message -----
{"log":"2019-09-17 21:25:08.636465 Series([], Name: transacttime, dtype: datetime64[ns])"}
----- got message -----
{"log":"2019-09-17 21:25:08.633038 Series([], Name: transacttime, dtype: datetime64[ns])"}
----- got message -----
{"log":"2019-09-17 …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 stable/fluent-bit 作为图表中的子图表。该图表在 values.yaml 中有一个值:
backend:
es:
host: elasticsearch
Run Code Online (Sandbox Code Playgroud)
如何在不更改流畅位图的情况下将 backend.es.host 的值设置为 {Release.Name}-elasticsearch 之类的值?
fluent-bit ×10
fluentd ×5
kubernetes ×5
logging ×2
android ×1
asp.net-core ×1
filter ×1
grep ×1
java ×1
monitoring ×1
serilog ×1
spring-boot ×1