标签: fluentd

Python 日志记录 - 当前安装的记录器/处理程序的概述

我正在尝试使用代码中的记录器从 Django 项目设置 Fluentd 日志处理程序:

def get_fluentd_logger(name):
    import logging
    from fluent import handler

    logging.basicConfig(level=logging.DEBUG)
    logger = logging.getLogger(name)
    logger.addHandler(handler.FluentHandler(name, host='localhost', port=24224))
    return logger
Run Code Online (Sandbox Code Playgroud)

handler.FluentHandler来自包fluent-logger,我在本地运行fluent

流利的.conf:

<source>
  type forward
  port 24224
</source>

<match **>
  type copy
  <store>
        type stdout
  </store>

  <store>
          type forward
          send_timeout 60s
          recover_wait 10s
          heartbeat_interval 1s
          phi_threshold 8
          hard_timeout 60s

          <server>
            name monitoring
            host 1.2.3.4
            port 24224
            weight 100
          </server>
  </store>
</match>
Run Code Online (Sandbox Code Playgroud)

当我从非 django python 项目运行它时,它工作正常,但是当从 django 调用时,它不执行任何操作。

问题是:有没有办法查看当前安装的记录器及其处理程序,以便我可以调试这种情况?

[编辑]

当从 django 设置完成时,如下所示:

LOGGING …
Run Code Online (Sandbox Code Playgroud)

python django logging fluentd

5
推荐指数
1
解决办法
3756
查看次数

Fluentd 日志源格式 RegEX

我有这种格式的日志:

2015-02-25 18:33:06,975 INFO c.a.p.c.b.s.Monitor akka://application/user/daemons/monitor : 91 active threads, 4175691776 bytes used
Run Code Online (Sandbox Code Playgroud)

我想到了这个正则表达式:

(?<time>[^ ]* [^ ]*) (?<method>[^ ]*) (?<path>[^ ]*) (?<message>[^ ].*$)
Run Code Online (Sandbox Code Playgroud)

当我在Fluentular 中测试时 (我将使用它作为 fluentd 日志输入的格式)我得到以下字段:

time  =>    2015/02/25 18:33:06 +0000
method  =>    INFO
PATH    =>  <empty>
message => c.a.p.c.b.s.Monitor akka://application/user/daemons/monitor : 91 active threads, 4175691776 bytes used
Run Code Online (Sandbox Code Playgroud)

我无法打破消息字符串。我希望匹配的组是:

time  =>    2015/02/25 18:33:06 +0000
method  =>    INFO
PATH  =>    c.a.p.c.b.s.Monitor
message =>    akka://application/user/daemons/monitor : 91 active threads, 4175691776 bytes used
Run Code Online (Sandbox Code Playgroud)

什么是合适的正则表达式

regex fluentd

5
推荐指数
1
解决办法
4340
查看次数

在fluentd中测量两个事件之间的经过时间

我正在寻找一种使用 fluentd 测量事件之间经过时间的方法。能够合并两个或多个事件也很棒。

到目前为止,我一直在使用logstash。我在 logstash 中的用例有两个插件:

我只是不知道如何在 fluentd 中做到这一点。我在这里错过了什么?

例子:

我有一个包含进程日志的文本文件,如下所示:

Fri May  8 05:00:00 GMT 2015: start subprocess 1 with param p
Fri May  8 05:10:42 GMT 2015: some other message
Fri May  8 05:11:44 GMT 2015: doing more stuff
Fri May  8 05:10:00 GMT 2015: end subprocess 1
Run Code Online (Sandbox Code Playgroud)

我的目标是根据事件的时间戳来衡量完成子流程 1 所花费的时间。这可以使用 logstash 中的 elapsed 过滤器轻松完成,但我不知道如何在 fluentd 中解决这个问题。

我想要一个 :

2015-05-08 05:10:00 parsed: {"message":"end subprocess 1","elapsed.time":"10.0"}
Run Code Online (Sandbox Code Playgroud)

.. 甚至更好我想合并事件的一些字段(例如来自开始事件的参数):

2015-05-08 05:10:00 parsed: {"message":"end subprocess 1","elapsed.time":"10.0", "param": …
Run Code Online (Sandbox Code Playgroud)

merge duration elapsed fluentd

5
推荐指数
0
解决办法
340
查看次数

无法在撰写中使用服务名称从(fluentd)日志驱动程序登录

我在 docker 中有以下设置:

  • 应用程序 (httpd)
  • 流利的
  • 弹性搜索
  • 基巴纳

应用程序的 logdriver 的配置描述了 fluentd 容器。日志将保存在 ES 中并显示在 Kibana 中。

当 logdriver 配置为这样时,它可以工作:

web:
    image: httpd
    container_name: httpd
    ports:
      - "80:80"
    links:
      - fluentd
    logging:
      driver: "fluentd"
      options:
        fluentd-address: localhost:24224
        tag: httpd.access
Run Code Online (Sandbox Code Playgroud)

fluentd 将其暴露的端口 24224 映射到主机的端口 24224 上。

 fluentd:
    build: ./fluentd
    image: fluentd
    container_name: fluentd
    links:
      - "elasticsearch"
    ports:
      - "24224:24224"
Run Code Online (Sandbox Code Playgroud)

但我不想在主机网络上暴露我的流利。我想让它在 docker 网络中保持“私有”(我只想在主机网络上映射应用程序和 kibana),如下所示:

 fluentd:
   build: ./fluentd
   image: fluentd
   container_name: fluentd
   links:
     - "elasticsearch"
Run Code Online (Sandbox Code Playgroud)

端口 24224 仍然公开(在 dockerfile 中),但它没有映射到主机网络上。现在我想更改我的应用程序的日志驱动程序的配置: logging: driver: "fluentd" …

fluentd docker docker-networking efk

5
推荐指数
1
解决办法
2162
查看次数

Fluentd 是否支持文件输出的日志轮换?

我当前使用的设置是具有多个容器的 Docker 组合堆栈。这些容器将其日志记录信息发送到运行 Fluentd 守护进程的日志记录容器(在 compose 堆栈内)。Fluentd 的配置由一个in_forward源组成,该源收集日志并将其写入单独的文件,具体取决于容器。我的 Fluentd 配置文件类似于:

<source>
  @type forward
  port 24224
  bind 0.0.0.0
</source>

<match container1>
   @type copy
   <store>
     @type file
     path /fluentd/log/container1.*.log
     format single_value
     message_key "log"
   </store>
</match>

...
Run Code Online (Sandbox Code Playgroud)

我的 docker-compose.yml 文件看起来像这样:

version: '3'

services:

  container1:
    build: ./container1
    container_name: "container1" 
    depends_on:
     - "logger" 
    logging:
      driver: "fluentd"
      options:
        tag: container1  
    networks:
      static-net:
        ipv4_address: 172.28.0.4  


  ...


  logger:
    build: ./logger
    container_name: "logger"
    ports:
     - "24224:24224"
     - "24224:24224/udp"
    volumes:
     - ./logger/logs:/fluentd/log
    networks:
      static-net:
        ipv4_address: 172.28.0.5          

networks:
  static-net: …
Run Code Online (Sandbox Code Playgroud)

ruby logging fluentd docker

5
推荐指数
1
解决办法
1万
查看次数

禁用 fluidd stdout 输出插件中的时间和标签

使用 json 从 fluidd 输出插件 stdout 中删除时间和标签

Fluentd 的输出插件产生如下输出:

2017-11-28 11:43:13.814351757 +0900 标签: {"field1":"value1","field2":"value2"}

所以时间戳和标签位于 json 之前。如何删除这些字段 - 我只喜欢 json 输出

<match pattern>
  @type stdout
</match>
Run Code Online (Sandbox Code Playgroud)

预期输出:{“field1”:“value1”,“field2”:“value2”}

plugins fluentd kubernetes

5
推荐指数
1
解决办法
1156
查看次数

Fluentd worker 0 完成状态为 0

运行 Fluentd 3.5,在刷新缓冲区失败后似乎放弃了。我可以看到有一个 retry_forever 参数当前设置为 false,但是我宁愿找出导致它的原因并将重试阈值设置为更高的值

配置:


<source>
    @type tail
    path "XXX"
    tag "XXX"
    pos_file "XXX"
    <parse>
      @type "json"
    </parse>
  </source>
  <match *.**>
    @type forward
    compress gzip
    buffer_type file
    buffer_path d:\dynamo\td-agent\buffer
    flush_interval 10m
    <server>
      host "XXX"
      port XXX
    </server>
    <buffer tag>
      @type file
      path XXX
      flush_interval 10m
    </buffer>
  </match>

Run Code Online (Sandbox Code Playgroud)

日志

2019-09-30 13:53:03 +0100 [warn]: #0 failed to flush the buffer. retry_time=0 next_retry_seconds=2019-09-30 13:53:04 +0100 chunk="593c4937d535515d77cffca381c87720" error_class=Fluent::Plugin::ForwardOutput::NoNodesAvailable error="no nodes are available"
  2019-09-30 13:53:03 +0100 [warn]: #0 d:/Dynamo/td-agent/embedded/lib/ruby/gems/2.4.0/gems/fluentd-1.7.0/lib/fluent/plugin/out_forward/load_balancer.rb:55:in `select_healthy_node'
  2019-09-30 13:53:03 +0100 …
Run Code Online (Sandbox Code Playgroud)

fluentd

5
推荐指数
1
解决办法
636
查看次数

Fluent Bit 1.8+ 和 MULTILINE_PARSER

我的目标是从 Bare Kubernetes 上运行的 Java (Spring Boot) 应用程序收集日志。然后这些日志会被翻译成 ES 并在 Kibana 中可视化。

为此,我通过 Kubernetes 1.22 部署了 Fleunt Bit 1.8.9。由于我使用 Containerd 代替 Docker,所以我的 Fluent Bit 配置如下(请注意,我只指定了一个日志文件):

  fluent-bit.conf: |
    [SERVICE]
        Flush         1
        Log_Level     info
        Daemon        off
        Parsers_File  parsers.conf
        HTTP_Server   On
        HTTP_Listen   0.0.0.0
        HTTP_Port     2020

    @INCLUDE input-kubernetes.conf
    @INCLUDE filter-kubernetes.conf
    @INCLUDE output-elasticsearch.conf

  input-kubernetes.conf: |
    [INPUT]
        Name              tail
        Tag               kube.*
        Path              /var/log/containers/*.log
        Read_from_head    true
        Parser            cri

  filter-kubernetes.conf: |
    [FILTER]
        Name                kubernetes
        Match               kube.*
        Kube_URL            https://kubernetes.default.svc:443
        Kube_CA_File        /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
        Kube_Token_File     /var/run/secrets/kubernetes.io/serviceaccount/token
        Kube_Tag_Prefix     kube.var.log.containers.
        Merge_Log           On
        Merge_Log_Key       log_processed …
Run Code Online (Sandbox Code Playgroud)

fluentd efk fluent-bit

5
推荐指数
1
解决办法
6578
查看次数

fluidd elasticsearch 插件 - 客户端无法验证服务器是否为 Elasticsearch

我想将一些 nginx 日志从 Fluentd 发送到 Elasticsearch ,但是,由于以下错误消息,Fluentd 无法启动:

客户端无法验证服务器是否为 Elasticsearch。如果服务器运行不受支持的产品,某些功能可能不兼容。

[error]: #0 意外错误 error_class=Elasticsearch::UnsupportedProductError error="客户端注意到服务器不是 Elasticsearch,我们不支持这个未知产品。"

在此输入图像描述

这是我的流利配置:

<source>
  @type tail  
    <parse>    
      @type nginx 
    </parse>  
  path /tmp/lab4/nginx/access.log  
  pos_file /tmp/lab4/nginx/access.po
  tag nginx.access
</source>

<match nginx.**>
 @type elasticsearch
 scheme http
 host 192.168.1.154 
 port 9200 
 with_transporter_log true
 @log_level debug
</match>
Run Code Online (Sandbox Code Playgroud)

如果我执行curl http://192.168.1.154:9200,我可以看到Elasticsearch 的响应以及系统版本和其他信息。

作为参考,我正在使用:

  • fluidd 版本 1.14.5
  • fluid 弹性搜索插件 5.2.0
  • 弹性搜索 7.12.0

知道我做错了什么吗?

elasticsearch fluentd efk

5
推荐指数
2
解决办法
2万
查看次数

Fluentd 无法在 Windows 上使用 Calyptia-Fluentd 找到自定义过滤器插件

在这个系统上,我有calyptia-fluentd,并且我正在尝试开发一个自定义过滤器插件。

首先,我使用一些初始代码创建了一个 gem,并且安装了这个 gem,并使用该插件创建了一个配置文件。

但是,calyptia-fluentd从命令行启动(环境是安装程序提供的环境,而不是通用的 Windows 命令提示符)会出现以下情况:

C:\opt\calyptia-fluentd>calyptia-fluentd -vv
2022-08-11 16:24:23 +0200 [info]: fluent/log.rb:330:info: parsing config file is succeeded path="C:\\opt\\calyptia-fluentd\\bin\\\\..\\etc\\calyptia-fluentd\\calyptia-fluentd.conf"
2022-08-11 16:24:23 +0200 [info]: fluent/log.rb:330:info: gem 'fluentd' version '1.15.0'
2022-08-11 16:24:23 +0200 [info]: fluent/log.rb:330:info: gem 'fluent-plugin-calyptia-monitoring' version '0.1.3'

...

2022-08-11 16:24:23 +0200 [info]: fluent/log.rb:330:info: gem 'fluent-plugin-custom' version '0.0.3'

...

2022-08-11 16:24:23 +0200 [info]: fluent/log.rb:330:info: gem 'fluent-plugin-windows-eventlog' version '0.8.1'
2022-08-11 16:24:23 +0200 [error]: fluent/log.rb:372:error: config error file="C:\\opt\\calyptia-fluentd\\bin\\\\..\\etc\\calyptia-fluentd\\calyptia-fluentd.conf" error_class=Fluent::NotFoundPluginError error="Unknown filter plugin 'filter_custom'. Run 'gem search -rd fluent-plugin' …
Run Code Online (Sandbox Code Playgroud)

fluentd

5
推荐指数
1
解决办法
386
查看次数