fluented_input_new.yaml:

    1. 当前可用的配置:
    2. #日志源配置,格式化成json
    3. <source>
    4. @id fluentd-containers.log
    5. @type tail
    6. path /var/log/containers/*/*.log
    7. pos_file /var/log/es-containers.log.pos
    8. tag raw.kubernetes.*
    9. <parse>
    10. @type multi_format
    11. <pattern>
    12. format json
    13. time_key timestamp
    14. time_format %Y-%m-%dT%H:%M:%S.%NZ
    15. </pattern>
    16. <pattern>
    17. format /^(?<time>.+) (?<stream>stdout|stderr) [^ ]* (?<log>.*)$/
    18. time_format %Y-%m-%dT%H:%M:%S.%N%:z
    19. </pattern>
    20. </parse>
    21. </source>
    22. # 检测java异常栈日志,并作为一条日志转发
    23. # Detect exceptions in the log output and forward them as one log entry.
    24. <match raw.kubernetes.**>
    25. @id raw.kubernetes
    26. @type detect_exceptions
    27. remove_tag_prefix raw
    28. message log
    29. stream stream
    30. languages java
    31. multiline_flush_interval 5
    32. max_bytes 0
    33. max_lines 1000
    34. </match>
    35. #将json日志log中的value解析成message字段内容,不使用则es中message会变成log字段
    36. <filter kubernetes.**>
    37. @id filter_parser
    38. @type parser # multi-format-parser多格式解析器插件
    39. key_name log # 在要解析的记录中指定字段名称。
    40. reserve_data true # 在解析结果中保留原始键值对。
    41. remove_key_name_field true # key_name 解析成功后删除字段。
    42. <parse>
    43. @type multi_format
    44. <pattern>
    45. format json
    46. </pattern>
    47. <pattern>
    48. format none
    49. </pattern>
    50. </parse>
    51. </filter>
    52. #多行日志拼接,主要针对pod日志超过docker 16k限制的大日志
    53. <filter kubernetes.**>
    54. @type concat
    55. key message
    56. separator ""
    57. multiline_start_regexp /^\[\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}.\d{3}\]/
    58. #Continuous_line_regexp /^\\u0009java/
    59. multiline_end_regexp /\u200b\n$|^\n$/
    60. flush_interval 0
    61. </filter>
    62. # 添加k8s相关的元数据,pod namespace id 等
    63. <filter kubernetes.**>
    64. @id filter_kubernetes_metadata
    65. @type kubernetes_metadata
    66. </filter>
    67. # 区分标准格式和非标准格式日志
    68. <match kubernetes.**>
    69. @type rewrite_tag_filter
    70. <rule>
    71. key message
    72. pattern /^\[20/
    73. tag INFO.kubernetes.*
    74. </rule>
    75. <rule>
    76. key message
    77. pattern /^\[20/
    78. tag NULL.kubernetes.*
    79. invert true
    80. </rule>
    81. </match>
    82. # 对标准格式的日志提取日志级别level
    83. <filter INFO.kubernetes.**>
    84. @type parser
    85. key_name message
    86. reserve_data true
    87. <parse>
    88. @type regexp
    89. #expression /^\[[^\]]*\] \[[^\]]*\] \[[^\]]*\] (?<level>\S+)/
    90. expression /^\[[^\]]*\] \[[^\]]*\] \[(?<thand>[^\]]*)\] (?<level>\S+)/
    91. types level:string
    92. </parse>
    93. </filter>
    94. # 对标准格式的日志写日志标签 这一步可以忽略
    95. <filter INFO.kubernetes.**>
    96. @type record_transformer
    97. #@type record_modifier
    98. <record>
    99. level ${record["level"]}
    100. </record>
    101. </filter>
    102. # 非标准格式的日志level为null
    103. <filter NULL.kubernetes.**>
    104. @type record_transformer
    105. <record>
    106. level NULL
    107. </record>
    108. </filter>
    109. # 排除不需要的日志
    110. <filter NULL.kubernetes.**>
    111. @type grep
    112. <exclude>
    113. key $.kubernetes.labels.k8s-app
    114. pattern /fluentd-es|kubernetes-dashboard/
    115. </exclude>
    116. <exclude>
    117. key SYSLOG_IDENTIFIER
    118. pattern /kubelet/
    119. </exclude>
    120. </filter>
    121. # 删除日志中不需要的key
    122. <filter **>
    123. @type record_transformer
    124. remove_keys stream,$.kubernetes.container_image_id,$.kubernetes.labels.jenkins-fold,$.kubernetes.labels.pod-template-hash,$.kubernetes.labels.repo-config-group,$.kubernetes.labels.repo-config-project,$.kubernetes.labels.repo-group,$.kubernetes.labels.repo-project,$.kubernetes.master_url,$.kubernetes.namespace_id,$.kubernetes.namespace_labels.env,$.kubernetes.pod_id,$.kubernetes.container_name
    125. </filter>