【问题标题】:Convert filebeat [@timestamp] from UTC to local timezone将 filebeat [@timestamp] 从 UTC 转换为本地时区
【发布时间】:2021-04-20 08:35:52
【问题描述】:

我正在尝试从 KOPS 集群中正在运行的 pod 收集日志。我在 KOPS 集群中运行 filebeat DemonSet 以从我的 pod(应用程序)收集日志,然后将这些日志发送到集群外部,logstash 服务接受它们并将它们保存到文件中。

我注意到即使我的所有节点和 Pod 都在 SGT 时区运行,filebeat 总是生成带有 UTC 时间戳的日志。

我在 filebeat 处理器中设置了 add_locale,但它没有帮助。

  • 添加语言环境: 格式:偏移量

节点时区

pod 时区

完成文件beat-kubernetes.yaml

---
apiVersion: v1
kind: Namespace
metadata:
  name: logging
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: filebeat-config
  namespace: logging
  labels:
    k8s-app: filebeat
data:
  filebeat.yml: |-
    # To enable hints based autodiscover, remove `filebeat.inputs` configuration and uncomment this:
    filebeat.autodiscover:
      providers:
        - type: kubernetes
          node: ${NODE_NAME}
          templates:
            - condition:
                equals:
                  kubernetes.namespace: default
            - condition:
                contains:
                  kubernetes.pod.name: "application1"
              config:
                - type: container
                  paths:
                    - /var/log/containers/*${data.kubernetes.container.id}*.log
            - condition:
                contains:
                  kubernetes.pod.name: "application2"
              config:
                - type: container
                  paths:
                    - /var/log/containers/*${data.kubernetes.container.id}*.log
    processors:
      - add_locale:
          format: offset
      - add_kubernetes_metadata:
          host: ${NODE_NAME} 
          matchers:
            - logs_path:
                logs_path: "/var/log/containers/"
    output.logstash:
      hosts: ["IP:5044"]
---
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: filebeat
  namespace: logging
  labels:
    k8s-app: filebeat
spec:
  selector:
    matchLabels:
      k8s-app: filebeat
  template:
    metadata:
      labels:
        k8s-app: filebeat
    spec:
      serviceAccountName: filebeat
      terminationGracePeriodSeconds: 30
      hostNetwork: true
      dnsPolicy: ClusterFirstWithHostNet
      containers:
      - name: filebeat
        image: docker.elastic.co/beats/filebeat:7.10.1
        args: [
          "-c", "/etc/filebeat.yml",
          "-e",
        ]
        env:
        - name: NODE_NAME
          valueFrom:
            fieldRef:
              fieldPath: spec.nodeName
        securityContext:
          runAsUser: 0
          # If using Red Hat OpenShift uncomment this:
          #privileged: true
        resources:
          limits:
            memory: 200Mi
          requests:
            cpu: 100m
            memory: 100Mi
        volumeMounts:
        - name: config
          mountPath: /etc/filebeat.yml
          readOnly: true
          subPath: filebeat.yml
        - name: data
          mountPath: /usr/share/filebeat/data
        - name: varlibdockercontainers
          mountPath: /var/lib/docker/containers
          readOnly: true
        - name: varlog
          mountPath: /var/log
          readOnly: true
        - name: tz-config
          mountPath: /etc/localtime
      volumes:
      - name: config
        configMap:
          defaultMode: 0640
          name: filebeat-config
      - name: varlibdockercontainers
        hostPath:
          path: /var/lib/docker/containers
      - name: varlog
        hostPath:
          path: /var/log
      # data folder stores a registry of read status for all files, so we don't send everything again on a Filebeat pod restart
      - name: data
        hostPath:
          # When filebeat runs as non-root user, this directory needs to be writable by group (g+w).
          path: /var/lib/filebeat-data
          type: DirectoryOrCreate
      - name: tz-config
        hostPath:
          path: /usr/share/zoneinfo/Singapore

---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: filebeat
subjects:
- kind: ServiceAccount
  name: filebeat
  namespace: logging
roleRef:
  kind: ClusterRole
  name: filebeat
  apiGroup: rbac.authorization.k8s.io
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: filebeat
  labels:
    k8s-app: filebeat
rules:
- apiGroups: [""] # "" indicates the core API group
  resources:
  - namespaces
  - pods
  verbs:
  - get
  - watch
  - list
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: filebeat
  namespace: logging
  labels:
    k8s-app: filebeat
---

filebeat 输出日志

【问题讨论】:

    标签: kubernetes logstash filebeat kops


    【解决方案1】:

    不幸的是,我没有足够的声誉来添加评论,因此将其发布为答案。 following reference doc 提到:

    处理器为每个事件添加一个 event.timezone 值。

    因此,日志时间戳本身可能不会转换为本地时区,但它会在事件日志中添加额外的字段来表示时区,并且可用于通过使用日志的应用程序来格式化日志。

    【讨论】:

    • @Kyaw Min Thu L 这能回答你的问题吗?您是否尝试删除 add_locale 处理器?
    猜你喜欢
    • 2011-10-11
    • 2011-09-16
    • 1970-01-01
    • 1970-01-01
    • 2019-05-31
    • 2014-08-12
    • 1970-01-01
    • 2014-08-18
    • 2010-11-19
    相关资源
    最近更新 更多