logstash配置:
global: storageClass: alibabacloud-cnfs-nasservice: type: NodePort ports: - name: http port: 8080 targetPort: http protocol: TCP - name: syslog-udp port: 1514 targetPort: syslog-udp protocol: UDP - name: syslog-tcp port: 1514 targetPort: syslog-tcp protocol: TCPpersistence: # 云盘 # storageClass: "alicloud-disk-ssd" # size: 20Gi # NAS storageClass: alibabacloud-cnfs-nas size: 2Giinput: |- udp { port => 1514 codec => json_lines } tcp { port => 1514 codec => json_lines } http { port => 8080 }filter: |- json { source => "message" target => "json" }output: |- if [env] != "" { elasticsearch { hosts => ["xxx.xxx.xxx.xxx:xxxx"] index => "logs33--success-%{+YYYY.MM.dd}" } } else { elasticsearch { hosts => ["xxx.xxx.xxx.xxx:xxxx"] index => "logs-failure-%{+YYYY.MM.dd}" } } stdout { codec => rubydebug }
logback配置
<?xml version="1.0" encoding="UTF-8"?><configuration debug="false"> <springProfile name="dev"> <!--异步发送日志--> <appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender"> <appender-ref ref="LOGSTASH"/> </appender> <!-- 日志输出级别 --> <root level="INFO"> <!-- 添加logstash日志输出 --> <appender-ref ref="LOGSTASH"/> </root> <!-- logstash 设置 --> <appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender"> <!-- <param name="Encoding" value="UTF-8"/>--> <!-- logstash 服务器 --> <destination>xxx.xxx.xxx.xxx:xxx</destination> <!-- encoder is required --> <encoder charset="UTF-8" class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder"> <!-- // 索引名--> <customFields>{"env":"dev"}</customFields> <providers> <timestamp> <timeZone>UTC</timeZone> </timestamp> <pattern> { "serviceName": "${name}", "level": "%level", "message": "%message", "env": "test", "stack_trace": "%exception{5}", "pid": "${PID:-}", "thread": "%thread", "class": "%logger{40}" } </pattern> </providers> </encoder> <!-- 临界值过滤器,过滤掉低于指定临界值的日志。当日志级别等于或高于临界值时,过滤器返回NEUTRAL;当日志级别低于临界值时,日志会被拒绝,OFF>ERROR>WARN>INFO>DEBUG>TRACE>ALL --> <!-- <filter class="ch.qos.logback.classic.filter.ThresholdFilter">--> <!-- <level>INFO</level>--> <!-- </filter>--> </appender> <!-- 定义日志输出级别、格式等配置 --> </springProfile></configuration>
logstash打印的日志:
[2023-09-22T02:26:50,029][INFO ][logstash.codecs.json ][main][f3916e23ca79e9308acd3be143501936b256d568e41e841a6fd83f731839d2c0] ECS compatibility is enabled but `target` option was not specified. This may cause fields to be set at the top-level of the event where they are likely to clash with the Elastic Common Schema. It is recommended to set the `target` option to avoid potential schema conflicts (if your data is ECS compliant or non-conflicting, feel free to ignore this message){ "event" => { "original" => "" }, "json" => nil, "message" => "", "host" => { "ip" => "10.0.125.0" }, "url" => { "path" => "/bad-request" }, "http" => { "version" => "HTTP/1.0", "method" => "GET" }, "@timestamp" => 2023-09-22T02:26:50.030993835Z, "@version" => "1"}
从打印的日志看,输出的格式明显有问题。
自己解决了,使用下面的logstash配置就ok了
global: storageClass: alibabacloud-cnfs-nasservice: type: NodePort ports: - name: http port: 8080 targetPort: http protocol: TCP - name: syslog-udp port: 1514 targetPort: syslog-udp protocol: UDP - name: syslog-tcp port: 1514 targetPort: syslog-tcp protocol: TCPpersistence: enabled: true # NAS storageClass: alibabacloud-cnfs-nas size: 2GicontainerPorts: - name: http containerPort: 8080 protocol: TCP - name: monitoring containerPort: 9600 protocol: TCP - name: syslog-udp containerPort: 1514 protocol: UDP - name: syslog-tcp containerPort: 1514 protocol: TCPinput: |- udp { port => 1514 type => syslog codec => json_lines } tcp { port => 1514 type => syslog codec => json_lines } http { port => 8080 }output: |- if [active] != "" { elasticsearch { hosts => ["xxx.xxx.xxx.xxx:xxxx"] index => "%{active}-logs-%{+YYYY.MM.dd}" } } else { elasticsearch { hosts => ["xxx.xxx.xxx.xxx:xxxx"] index => "ignore-logs-%{+YYYY.MM.dd}" } } stdout { }
我讲下我的解决过程:
1、刚开始以为是logstash的问题,但是发现使用curl测试发送消息是ok的
➜ ~ kubectl port-forward service/logstash 8080:8080 -nlogstash➜ ~ curl -X POST -d '{"message": "Hello World","env": "dev"}' http://localhost:8080
2、既然logstash没问题我就看看是不是logback有问题,发现不管怎么配置都不行
3、我就打算换个思路既然curl发送日志可以logback不行,我就想抓包试试logback发送的日志请求报文,于是我查看logback配置的时候我发现使用的是net.logstash.logback.appender.LogstashTcpSocketAppender
类,再加上我使用的是curl的http请求,我于是推导出可能我的logstash的tcp端口可能不对,于是又回到logstash配置上面
4、最后修改logstash配置让tcp端口ping通才真正解决问题,所以问题就是tcp端口不通导致的,使用下面命令测试
telnet xxx.xxx.xxx.xxx xxxx
5、总结一下就是对logstash不太熟悉导致的,不知道logback是通过tcp发送的请求到logstash,自己还一直处在curl没有问题的状态中,好在最后发现了问题所在。
问题内容: 如何配置OpenEJB日志记录格式?这就是我现在在日志中看到的内容: 我想禁用消息,并更改其他消息的格式。中的更改无效。 问题答案: 这是我为使事情正常运行所做的工作: 现在工作正常。这是我的: 这是: 现在,由于大卫的支持,我可以在测试期间微调OpenEJB的日志记录:)
我有以下情况:一个使用日志的Spring启动应用程序,以及已经在应用程序中配置的几个日志记录属性 我想添加其他只能通过文件可用的配置选项,但是一旦我将此文件添加到类路径(无论它被命名为还是),它就会覆盖中的所有内容,并且所有日志记录级别/模式以及那里定义的其他选项都不再有效 - 似乎在添加的所有选项 被忽略,我需要在xml文件中重新添加它们而不是yml。 我的问题是:是否可以合并这两个配置?我的意
我的springboot项目中想要异步打印日志到文件,对 logback 做了如下配置 java的controller中使用下面代码打印日志 在日志文件中打印出线程名称,同时在IDEA控制台中也打印线程名称,照理说如果是异步写入的日志这两处的线程名称应该不一样,结果日志文件中输出的结果是 控制台中输出的是 线程ID和名称分别是:86 / http-nio-7076-exec-2 两处的线程名称一样
我正在使用NetworkExtension框架在iOS上使用VPN。我可以安装配置并建立连接。我的问题是,是否有一种方法可以检测VPN配置是否仍在安装,或者检测用户是否已卸载该配置? 我不一定要在后台寻找通知或任何东西,但我要寻找的是当应用程序被带到前台时我所做的一些方法/变通方法? 我正在使用由中间CA颁发的证书进行证书身份验证,并尝试了以下“评估信任”方法:检查iOS上是否安装了配置文件 这对
问题内容: 我正在迁移一个曾经使用log4j进行logback / slf4j的应用程序,并且已经出现问题约2周了……我做了一个小项目来测试logback / slf4j,它的工作效果很好,但是由于某种原因,在应用它时到实际的应用程序,它只是不想工作。 我正在使用JBoss 6.2,将EAR部署到standalone / deployments目录并启动服务器(除了我得到这个异常的事实,这一切都很
但是,在日志配置的xml文件中,冒号后面总是有一个破折号。这是为什么?例如: ” 2.不断变化的财产名称 特别是,此属性在application.properties(或.yml)中没有等价属性来配置它 ${log_file_total_size_cap:-0} 如果要将该属性更改为其他值,则必须设置LOG_FILE_TOTAL_SIZE_CAP属性。我如何在仍然使用spring Boot提供的原