首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将我的java应用程序的日志消息写入elk堆栈的最好方法是什么?

将我的java应用程序的日志消息写入elk堆栈的最好方法是什么?
EN

Stack Overflow用户
提问于 2018-10-24 02:10:50
回答 2查看 170关注 0票数 0

我想将Java应用程序中的日志数据保存到ELK堆栈中。我可以自由配置日志数据的格式。不幸的是,我只能使用log4j 1.x。

在ELK Stack中存储结构化日志数据的最简单方法是什么?

EN

回答 2

Stack Overflow用户

发布于 2022-02-23 19:47:20

您可以使用Filebeat通过RollingFileAppenders写入您的应用程序级别日志。将以下内容添加到您的logback.xml中,以将应用程序日志写入目录:

代码语言:javascript
复制
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>/etc/logging/sample.log</file>
        <immediateFlush>false</immediateFlush>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>
                /etc/logging/hsvt_akka.%d{yyyy-MM-dd}.%i.log.zip
            </fileNamePattern>
            <maxFileSize>5KB</maxFileSize>
            <maxHistory>20</maxHistory>
            <totalSizeCap>1MB</totalSizeCap>
        </rollingPolicy>
        <encoder>
            <pattern>[%date{ISO8601}] [%level] [%logger] [%marker] [%thread] - %msg MDC: {%mdc}%n</pattern>
        </encoder>
    </appender>

现在配置filebeat以读取这些写入目录/etc/logging的日志,作为集群中的java应用程序的sidecar运行,例如k8s

为文件节拍创建configMap:

代码语言:javascript
复制
filebeat.yml: |
    filebeat:
      inputs:
      - type: filestream
        enabled: true
        paths:
          - /etc/logging/*.log
          - /etc/logging/*.log.*
        prospector:
          scanner:
            check_interval: 1s

      config:
        inputs:
          path: /etc/filebeat.yml
          reload:
            enabled: true
            period: 10s
    output:
      elasticsearch:
        hosts: []
        protocol: 
        username: 
        password: 

现在将其作为sidecar容器添加到原始的java应用程序中。

代码语言:javascript
复制
- name: filebeat-sidecar
          image: elastic/filebeat:7.16.3
          command: ["filebeat"]
          args: ["-c","/etc/filebeat.yml","-e", "-strict.perms=false"]
          resources:
            limits:
              memory: "80Mi"
            requests:
              memory: "60Mi"
          securityContext:
            runAsUser: 2000
          volumeMounts:
            - name: filebeat-app-logs
              mountPath: /etc/logging
            - name: filebeat-config
              mountPath: /etc/filebeat.yml
              subPath: filebeat.yml
      volumes:
        - name: filebeat-app-logs
        - name: filebeat-config
          configMap:
            defaultMode: 0600
            name: filebeat-configmap
            items:
              - key: filebeat.yml
                path: filebeat.yml

您需要将java应用程序和filebeat配置为读取日志写入的相同卷。

票数 1
EN

Stack Overflow用户

发布于 2018-10-24 07:34:06

如果您需要一种简单的方法来将您的Java应用程序日志导入到Elasticsearch中,那么安装并运行filebeat来读取您的应用程序日志并将其导入到ES中。您可以使用filebeat摄取节点来解析您的日志,并将其存储到Elasticsearch中的单个字段中,以帮助实现可视化等。或者,您也可以安装logstash来进行解析,而不是安装filebeat摄取管道。以下是一些可供阅读的链接,帮助您入门:

https://www.elastic.co/guide/en/beats/filebeat/current/configuring-howto-filebeat.html

https://www.elastic.co/guide/en/beats/filebeat/current/configuring-ingest-node.html

https://www.elastic.co/guide/en/logstash/current/configuration.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52955338

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档