我正在尝试使用代码中的记录器从 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
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>
当我从非 django python 项目运行它时,它工作正常,但是当从 django 调用时,它不执行任何操作。
问题是:有没有办法查看当前安装的记录器及其处理程序,以便我可以调试这种情况?
[编辑]
当从 django 设置完成时,如下所示:
LOGGING …我有这种格式的日志:
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
我想到了这个正则表达式:
(?<time>[^ ]* [^ ]*) (?<method>[^ ]*) (?<path>[^ ]*) (?<message>[^ ].*$)
当我在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
我无法打破消息字符串。我希望匹配的组是:
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
什么是合适的正则表达式
我正在寻找一种使用 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
我的目标是根据事件的时间戳来衡量完成子流程 1 所花费的时间。这可以使用 logstash 中的 elapsed 过滤器轻松完成,但我不知道如何在 fluentd 中解决这个问题。
我想要一个 :
2015-05-08 05:10:00 parsed: {"message":"end subprocess 1","elapsed.time":"10.0"}
.. 甚至更好我想合并事件的一些字段(例如来自开始事件的参数):
2015-05-08 05:10:00 parsed: {"message":"end subprocess 1","elapsed.time":"10.0", "param": …我在 docker 中有以下设置:
应用程序的 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
fluentd 将其暴露的端口 24224 映射到主机的端口 24224 上。
 fluentd:
    build: ./fluentd
    image: fluentd
    container_name: fluentd
    links:
      - "elasticsearch"
    ports:
      - "24224:24224"
但我不想在主机网络上暴露我的流利。我想让它在 docker 网络中保持“私有”(我只想在主机网络上映射应用程序和 kibana),如下所示:
 fluentd:
   build: ./fluentd
   image: fluentd
   container_name: fluentd
   links:
     - "elasticsearch"
端口 24224 仍然公开(在 dockerfile 中),但它没有映射到主机网络上。现在我想更改我的应用程序的日志驱动程序的配置: logging: driver: "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>
...
我的 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: …使用 json 从 fluidd 输出插件 stdout 中删除时间和标签
Fluentd 的输出插件产生如下输出:
2017-11-28 11:43:13.814351757 +0900 标签: {"field1":"value1","field2":"value2"}
所以时间戳和标签位于 json 之前。如何删除这些字段 - 我只喜欢 json 输出
<match pattern>
  @type stdout
</match>
预期输出:{“field1”:“value1”,“field2”:“value2”}
运行 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>
日志
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 …我的目标是从 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 …我想将一些 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>
如果我执行curl http://192.168.1.154:9200,我可以看到Elasticsearch 的响应以及系统版本和其他信息。
作为参考,我正在使用:
知道我做错了什么吗?
在这个系统上,我有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' …