<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Prem Sharma</title>
    <description>The latest articles on DEV Community by Prem Sharma (@prem_sharma_3a951c400b378).</description>
    <link>https://dev.to/prem_sharma_3a951c400b378</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1682328%2Fadc37c7e-260a-49f7-a154-6ba9032be893.png</url>
      <title>DEV Community: Prem Sharma</title>
      <link>https://dev.to/prem_sharma_3a951c400b378</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/prem_sharma_3a951c400b378"/>
    <language>en</language>
    <item>
      <title>Need help setting up multiline parsers.</title>
      <dc:creator>Prem Sharma</dc:creator>
      <pubDate>Tue, 25 Jun 2024 15:25:58 +0000</pubDate>
      <link>https://dev.to/prem_sharma_3a951c400b378/need-help-setting-up-multiline-parsers-3ali</link>
      <guid>https://dev.to/prem_sharma_3a951c400b378/need-help-setting-up-multiline-parsers-3ali</guid>
      <description>&lt;p&gt;I have setup a multiline parser in my fluentbit.conf have tried the multiline parser with a base config on local cli and it seems to work there however when i add the parser to my production config the final optput is not taking the lines. below is my configuration that is not working. what am i missing&lt;br&gt;
configs i tried locally :&lt;br&gt;
`[SERVICE]&lt;br&gt;
    flush        1&lt;br&gt;
    log_level    info&lt;br&gt;
    parsers_file parsers_multiline.conf&lt;/p&gt;

&lt;p&gt;[INPUT]&lt;br&gt;
    name             tail&lt;br&gt;
    path             test.log&lt;br&gt;
    read_from_head   true&lt;br&gt;
    multiline.parser multiline-regex-java&lt;/p&gt;

&lt;p&gt;[OUTPUT]&lt;br&gt;
    name             stdout&lt;br&gt;
    match            *`&lt;br&gt;
where parsers_multiline.conf contains the multiline parser&lt;/p&gt;

&lt;p&gt;prod conf file &lt;br&gt;
&lt;code&gt;apiVersion: v1&lt;br&gt;
kind: ConfigMap&lt;br&gt;
metadata:&lt;br&gt;
  name: fluent-bit-config&lt;br&gt;
  namespace: loggly&lt;br&gt;
  labels:&lt;br&gt;
    k8s-app: fluent-bit&lt;br&gt;
data:&lt;br&gt;
  filter-kubernetes.conf: |&lt;br&gt;
    [FILTER]&lt;br&gt;
        Name                kubernetes&lt;br&gt;
        Match               kube.*&lt;br&gt;
        Kube_URL            https://kubernetes.default.svc.cluster.local:443&lt;br&gt;
        Merge_Log           On&lt;br&gt;
        K8S-Logging.Parser  On&lt;br&gt;
        Keep_Log            Off&lt;br&gt;
        K8S-Logging.Exclude Off&lt;br&gt;
        Annotations         Off&lt;br&gt;
        Labels              Off&lt;br&gt;
    [FILTER]&lt;br&gt;
        Name          nest&lt;br&gt;
        Match         kube.*&lt;br&gt;
        Operation     lift&lt;br&gt;
        Nested_under  kubernetes&lt;br&gt;
        Add_prefix    kubernetes_&lt;br&gt;
    [FILTER]&lt;br&gt;
        Name          nest&lt;br&gt;
        Match         kube.*&lt;br&gt;
        Operation     lift&lt;br&gt;
        Nested_under  kubernetes_labels&lt;br&gt;
        Add_prefix    kubernetes_labels_&lt;br&gt;
    [FILTER]&lt;br&gt;
        Name                modify&lt;br&gt;
        Match               kube.*&lt;br&gt;
        Rename              log MESSAGE&lt;br&gt;
        Rename              kubernetes.var.log.containers.name pod_name&lt;br&gt;
    [FILTER]&lt;br&gt;
        name                  multiline&lt;br&gt;
        match                 kube.*&lt;br&gt;
        multiline.key_content MESSAGE&lt;br&gt;
        multiline.parser      multiline-regex-java, python, go&lt;br&gt;
    [FILTER]&lt;br&gt;
        Name modify&lt;br&gt;
        Match kube.*&lt;br&gt;
        Remove kubernetes_container_hash&lt;br&gt;
        Remove kubernetes_docker_id&lt;br&gt;
        Remove kubernetes_pod_id&lt;br&gt;
        Remove logtag&lt;br&gt;
        Remove stream&lt;br&gt;
  fluent-bit.conf: |&lt;br&gt;
    [SERVICE]&lt;br&gt;
        Flush         1&lt;br&gt;
        Log_Level     info&lt;br&gt;
        Daemon        off&lt;br&gt;
        Parsers_File  parsers.conf&lt;br&gt;
        HTTP_Server   Off&lt;br&gt;
    @INCLUDE input-kubernetes.conf&lt;br&gt;
    @INCLUDE filter-kubernetes.conf&lt;br&gt;
    @INCLUDE output-loggly.conf&lt;br&gt;
  input-kubernetes.conf: |&lt;br&gt;
    [INPUT]&lt;br&gt;
        Name              tail&lt;br&gt;
        Tag               kube.*&lt;br&gt;
        Exclude_Path      /var/log/containers/fluent-bit-*&lt;br&gt;
        Path              /var/log/containers/*.log&lt;br&gt;
        Parser            cri&lt;br&gt;
        DB                /var/log/flb_kube.db&lt;br&gt;
        Mem_Buf_Limit     50MB&lt;br&gt;
        Skip_Long_Lines   On&lt;br&gt;
        Refresh_Interval  10&lt;br&gt;
  output-loggly.conf: |&lt;br&gt;
    [OUTPUT]&lt;br&gt;
        Name             http&lt;br&gt;
        Match            *&lt;br&gt;
        Host             ${LOGGLY_HOSTNAME}&lt;br&gt;
        Port             443&lt;br&gt;
        Tls              On&lt;br&gt;
        URI              /bulk/${LOGGLY_TOKEN}/tag/${LOGGLY_TAG}/&lt;br&gt;
        Format           json_lines&lt;br&gt;
        Json_Date_Key    timestamp&lt;br&gt;
        Json_Date_Format iso8601&lt;br&gt;
        Retry_Limit      False&lt;br&gt;
    [OUTPUT]&lt;br&gt;
        Name    stdout&lt;br&gt;
        Match   *&lt;br&gt;
        Format  json_lines&lt;br&gt;
  parsers.conf: |&lt;br&gt;
    [PARSER]&lt;br&gt;
        Name        docker&lt;br&gt;
        Format      json&lt;br&gt;
        Time_Key    time&lt;br&gt;
        Time_Format %Y-%m-%dT%H:%M:%S.%L&lt;br&gt;
        Time_Keep   On&lt;br&gt;
        # Command      |  Decoder | Field | Optional Action&lt;br&gt;
        # =============|==================|=================&lt;br&gt;
        Decode_Field_As   escaped    log&lt;br&gt;
    [PARSER]&lt;br&gt;
        Name        syslog&lt;br&gt;
        Format      regex&lt;br&gt;
        Regex       ^\&amp;lt;(?&amp;lt;pri&amp;gt;[0-9]+)\&amp;gt;(?&amp;lt;time&amp;gt;[^ ]* {1,2}[^ ]* [^ ]*) (?&amp;lt;host&amp;gt;[^ ]*) (?&amp;lt;ident&amp;gt;[a-zA-Z0-9_\/\.\-]*)(?:\[(?&amp;lt;pid&amp;gt;[0-9]+)\])?(?:[^\:]*\:)? *(?&amp;lt;message&amp;gt;.*)$&lt;br&gt;
        Time_Key    time&lt;br&gt;
        Time_Format %Y-%m-%dT%H:%M:%S.%L&lt;br&gt;
    [PARSER]&lt;br&gt;
        Name        cri&lt;br&gt;
        Format      regex&lt;br&gt;
        Regex       ^(?&amp;lt;time&amp;gt;[^ ]+) (?&amp;lt;stream&amp;gt;stdout|stderr) (?&amp;lt;logtag&amp;gt;[^ ]*) (?&amp;lt;log&amp;gt;.*)$&lt;br&gt;
        Time_Key    time&lt;br&gt;
        Time_Format %Y-%m-%dT%H:%M:%S.%L%z&lt;br&gt;
    [MULTILINE_PARSER]&lt;br&gt;
        name          multiline-regex-java&lt;br&gt;
        type          regex&lt;br&gt;
        flush_timeout 1000&lt;br&gt;
        #&lt;br&gt;
        # Regex rules for multiline parsing&lt;br&gt;
        # ---------------------------------&lt;br&gt;
        #&lt;br&gt;
        # configuration hints:&lt;br&gt;
        #&lt;br&gt;
        #  - first state always has the name: start_state&lt;br&gt;
        #  - every field in the rule must be inside double quotes&lt;br&gt;
        #&lt;br&gt;
        # rules |   state name  | regex pattern                  | next state&lt;br&gt;
        # ------|---------------|--------------------------------------------&lt;br&gt;
        rule      "start_state"   "/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3} \[.*\] .* \[.*\] .*/" "next_state"&lt;br&gt;
        rule      "next_state"    "/^(?!\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3} \[.*\] .* \[.*\] .*).*/" "cont"&lt;br&gt;
        rule      "cont"          "/^\s*at\s+/" "cont"&lt;br&gt;
        rule      "cont"          "/^\s*Caused by:/" "cont"&lt;br&gt;
        rule      "cont"          "/^\s*.*common frames omitted/" "cont"&lt;/code&gt;&lt;/p&gt;

</description>
      <category>fluentbit</category>
      <category>help</category>
    </item>
  </channel>
</rss>
