logstash 详细配置

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true">
	<!-- <property name="baseDir">/JavaWeb/tms/logs</property> -->
	<!-- <property name="baseDir">/usr/local/tomcat/tms2.wuliusys.com/logs/</property> -->
	<property name="LOG_HOME" value="logs" />
	<property name="ENCODER_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss} [%level]-%logger %m%n" />
	<!-- <property name="fileHost">http://10.35.8.24:9200</property> -->
	<property name="fileHost">Monitor.rfdoa.cn</property>
	<property name="smtpHost" value="Monitor.rfdoa.cn"></property>
	<property name="smtpPort" value="25"></property>
	<property name="username" value="rfd"></property>
	<property name="password" value="Rfd@123"></property>
	<property name="SSL" value="false"></property>
	<property name="email_to"
		value="weichuanhai@xiaojiuwo.cn,luoning@xiaojiuwo.cn,wanghaiyang@xiaojiuwo.cn,liuhao@xiaojiuwo.cn"></property>
	<!-- <property name="email_from" value="rfd@rufengda.com"></property> -->
	<property name="email_from" value="tms2.web@rufengda.com"></property>
	<property name="email_subject" value="【Error】: %logger"></property>

	<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
		<encoder>
			<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
			</pattern>
		</encoder>
	</appender>
	<appender name="EMAIL" class="ch.qos.logback.classic.net.SMTPAppender">
		<smtpHost>${smtpHost}</smtpHost>
		<smtpPort>${smtpPort}</smtpPort>
		<username>${username}</username>
		<password>${password}</password>
		<SSL>${SSL}</SSL>
		<asynchronousSending>false</asynchronousSending>
		<to>${email_to}</to>
		<from>${email_from}</from>
		<subject>${email_subject}</subject>
		<layout class="ch.qos.logback.classic.html.HTMLLayout">
			<pattern>%date%level%thread%logger{0}%line%message</pattern>
		</layout>
		<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
			<level>ERROR</level>
		</filter>
	</appender>
	<appender name="async" class="ch.qos.logback.classic.AsyncAppender">
		<discardingThreshold>0</discardingThreshold>
		<queueSize>512</queueSize>
		<appender-ref ref="EMAIL" />
	</appender>


	<appender name="ERROR_FILE"
		class="ch.qos.logback.core.rolling.RollingFileAppender">
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<fileNamePattern>${LOG_HOME}/tms_error.%d{yyyy-MM-dd}.log
			</fileNamePattern>
			<maxHistory>30</maxHistory>
		</rollingPolicy>
		<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
			<Pattern>${ENCODER_PATTERN}</Pattern>
		</encoder>
		<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
			<level>ERROR</level>
			<onMatch>ACCEPT</onMatch>
			<onMismatch>DENY</onMismatch>
		</filter>
	</appender>

	<appender name="LOG_INFO"
		class="ch.qos.logback.core.rolling.RollingFileAppender">
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<fileNamePattern>${LOG_HOME}/tms.%d{yyyy-MM-dd}.log
			</fileNamePattern>
			<maxHistory>30</maxHistory>
		</rollingPolicy>
		<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
			<Pattern>${ENCODER_PATTERN}</Pattern>
		</encoder>

		<filter class="ch.qos.logback.classic.filter.LevelFilter">
			<level>INFO</level>
			<onMatch>ACCEPT</onMatch>
			<onMismatch>DENY</onMismatch>
		</filter>
	</appender>



	<appender name="INBOUND_LOG_INFO"
		class="ch.qos.logback.core.rolling.RollingFileAppender">
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<fileNamePattern>${LOG_HOME}/tms_inbound.%d{yyyy-MM-dd}.log
			</fileNamePattern>
			<maxHistory>30</maxHistory>
		</rollingPolicy>
		<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
			<Pattern>${ENCODER_PATTERN}</Pattern>
		</encoder>
		<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
			<level>INFO</level>
			<onMatch>ACCEPT</onMatch>
			<onMismatch>DENY</onMismatch>
		</filter>
		<layout class="ch.qos.logback.classic.PatternLayout">
			<pattern>%msg%n</pattern>
		</layout>
	</appender>

	<appender name="ES_INBOUND"
		class="ch.qos.logback.core.rolling.RollingFileAppender">
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<fileNamePattern>${LOG_HOME}/tms_inbound.es.%d{yyyy-MM-dd}.log
			</fileNamePattern>
			<maxHistory>30</maxHistory>
		</rollingPolicy>
		<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
			<Pattern>${ENCODER_PATTERN}</Pattern>
		</encoder>
		<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
			<level>INFO</level>
			<onMatch>ACCEPT</onMatch>
			<onMismatch>DENY</onMismatch>
		</filter>
		<layout class="ch.qos.logback.classic.PatternLayout">
			<pattern>%msg%n</pattern>
		</layout>
	</appender>
	<appender name="ES_OUTBOUND"
		class="ch.qos.logback.core.rolling.RollingFileAppender">
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<fileNamePattern>${LOG_HOME}/tms_outbound.es.%d{yyyy-MM-dd}.log
			</fileNamePattern>
			<maxHistory>30</maxHistory>
		</rollingPolicy>
		<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
			<Pattern>${ENCODER_PATTERN}</Pattern>
		</encoder>
		<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
			<level>INFO</level>
			<onMatch>ACCEPT</onMatch>
			<onMismatch>DENY</onMismatch>
		</filter>
		<layout class="ch.qos.logback.classic.PatternLayout">
			<pattern>%msg%n</pattern>
		</layout>
	</appender>

	<logger name="ES_LOG_INBOUND" level="INFO">
		<appender-ref ref="ES_INBOUND" />
	</logger>
	<logger name="ES_LOG_OUTBOUND" level="INFO">
		<appender-ref ref="ES_OUTBOUND" />
	</logger>



	<appender name="OUTBOUND_LOG_INFO"
		class="ch.qos.logback.core.rolling.RollingFileAppender">
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<fileNamePattern>${LOG_HOME}/tms_outbound.%d{yyyy-MM-dd}.log
			</fileNamePattern>
			<maxHistory>30</maxHistory>
		</rollingPolicy>
		<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
			<Pattern>${ENCODER_PATTERN}</Pattern>
		</encoder>
		<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
			<level>INFO</level>
			<onMatch>ACCEPT</onMatch>
			<onMismatch>DENY</onMismatch>
		</filter>
		<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
			<Pattern>${ENCODER_PATTERN}</Pattern>
		</encoder>
	</appender>



	<root>
		<!--<level value="error" /> -->
		<!--<level value="info" /> -->
		<appender-ref ref="LOG_INFO" />
		<appender-ref ref="INBOUND_LOG_INFO" />
		<appender-ref ref="OUTBOUND_LOG_INFO" />
		<appender-ref ref="ERROR_FILE" />
		<appender-ref ref="console" />
		<appender-ref ref="async" />

	</root>

	<logger name="com.ibatis" level="DEBUG" />
	<logger name="com.ibatis.common.jdbc.SimpleDataSource" level="DEBUG" />
	<logger name="com.ibatis.common.jdbc.ScriptRunner" level="DEBUG" />
	<logger name="com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate"
		level="DEBUG" />
	<logger name="java.sql.Connection" level="DEBUG" />
	<logger name="java.sql.Statement" level="DEBUG" />
	<logger name="java.sql.PreparedStatement" level="DEBUG" />
</configuration>

<think>我们正在讨论Logstash配置方法。根据引用,Logstash配置通常通过配置文件(.conf文件)来定义,该文件包含输入、过滤器和输出三个部分。用户特别提到处理Java日志,因此我们需要考虑如何解析Java应用生成的日志(如Log4j或Logback)。引用[1]提到Logstash配置Java日志格式的方法,并给出了一个配置示例。引用[2]提到了logstash.yml配置文件,但用户问题更关注于处理日志的pipeline配置(即.conf文件)。引用[3]则提到了如何加密配置文件中的密码。因此,我们可以分步骤介绍Logstash配置方法,特别是针对Java日志的配置。步骤:1.配置文件结构:Logstash配置文件通常包含三个部分:input,filter,output。2.输入配置(input):指定日志来源,例如文件、beats、syslog等。3.过滤器配置(filter):用于解析和转换数据,对于Java日志,常用的过滤器是grok来解析日志格式,也可能使用date、mutate等插件。4.输出配置(output):指定处理后的数据发送到哪里,如Elasticsearch、文件、stdout等。针对Java日志(以Log4j为例),通常日志格式为:[%d{yyyy-MM-dd HH:mm:ss.SSS}][%thread]%-5level %logger{36}- %msg%n我们可以使用grok来解析这种格式。下面是一个配置示例:引用[1]中的配置示例(可能类似):input {file {path=> "/path/to/your/java.log"start_position=> "beginning"}}filter {grok {match=> {"message" =>"\[%{TIMESTAMP_ISO8601:timestamp}\] \[%{DATA:thread}\]%{LOGLEVEL:level} %{DATA:logger} -%{GREEDYDATA:message}" }}date{match =>["timestamp", "yyyy-MM-dd HH:mm:ss.SSS" ]target=> "@timestamp"}}output{elasticsearch{hosts =>["http://localhost:9200"]index=> "java-logs-%{+YYYY.MM.dd}"user =>"elastic"password =>"your_password"}}注意:在输出中,我们使用了明文密码,但引用[3]提到可以通过keystore来加密密码。我们可以使用Logstash的keystore功能来避免在配置文件中明文存储密码。创建keystore并添加密码的步骤(根据引用[3]):1.创建keystore(如果尚未创建):bin/logstash-keystore --path.settings /path/to/settingscreate2.添加密码(例如ES_PASSWORD):bin/logstash-keystore--path.settings/path/to/settings addES_PASSWORD然后输入密码。3.在配置文件中使用:output{elasticsearch{hosts =>["http://localhost:9200"]index=> "java-logs-%{+YYYY.MM.dd}"user=> "elastic"password=> "${ES_PASSWORD}"}}这样,密码就不会以明文形式出现在配置文件中。另外,引用[2]提到logstash.yml是Logstash的全局配置文件,可以在其中设置一些全局参数,如pipeline.workers等。但用户问题更关注于处理日志的pipeline配置,因此我们主要讲解.conf文件的配置。总结:Logstash配置的核心在于编写pipeline配置文件(.conf),其中定义input、filter和output。对于Java日志,使用grok解析日志格式是关键。同时,为了安全,敏感信息应使用keystore管理。根据要求,生成相关问题:1. Logstash如何解析多行日志(例如Java异常堆栈)?2.除了grok,还有哪些常用的Logstash过滤器插件?3.如何调试Logstash的grok模式?4.Logstash的keystore功能还可以存储哪些其他敏感信息?</think>### Logstash配置方法详解 Logstash配置主要通过定义**管道配置文件**(`.conf`文件)实现,核心包含三个部分:输入(input)、过滤器(filter)、输出(output)。以下是具体配置方法: #### 1. **基础配置结构** ```ruby input { # 定义数据来源 } filter { # 定义数据处理逻辑 } output { # 定义数据输出目的地 } ``` #### 2. **Java日志解析配置示例** 针对Log4j/Logback等Java日志格式的解析: ```ruby input { file { path => "/var/log/java-app/*.log" # 日志文件路径 start_position => "beginning" # 从文件开头读取 } } filter { grok { match => { "message" => "\[%{TIMESTAMP_ISO8601:timestamp}\] \[%{DATA:thread}\] %{LOGLEVEL:level} %{DATA:class} - %{GREEDYDATA:msg}" } # 解析标准Java日志格式 } date { match => ["timestamp", "yyyy-MM-dd HH:mm:ss.SSS"] # 转换时间字段 target => "@timestamp" # 覆盖默认时间戳 } } output { elasticsearch { hosts => ["http://es-server:9200"] # ES地址 index => "java-logs-%{+YYYY.MM.dd}" # 按日期分索引 user => "elastic" # ES用户名 password => "${ES_PASSWORD}" # 密码通过密钥管理[^3] } } ``` #### 3. **关键配置技巧** - **敏感信息加密**:使用`logstash-keystore`管理密码[^3] ```bash bin/logstash-keystore create bin/logstash-keystore add ES_PASSWORD # 配置中通过${ES_PASSWORD}引用 ``` - **多行日志处理**:解析Java异常堆栈 ```ruby input { file { codec => multiline { pattern => "^\[%{TIMESTAMP_ISO8601}\]" # 新日志行模式 what => "previous" # 合并到上一行 } } } ``` - **性能调优**:在`logstash.yml`中调整线程和队列[^2] ```yaml pipeline.workers: 4 # CPU核数 pipeline.batch.size: 125 # 每批处理事件数 queue.max_bytes: 1gb # 内存队列大小 ``` #### 4. **调试与验证** - **测试配置**:运行前校验语法 ```bash bin/logstash -f config.conf --config.test_and_exit ``` - **实时调试**:输出到控制台 ```ruby output { stdout { codec => rubydebug } # 查看解析后的数据结构 } ``` #### 5. **配置管理建议** - 复杂配置拆分为多个`.conf`文件 - 使用环境变量动态配置路径/主机 - 通过`sincedb`文件记录文件读取位置 > 提示:建议使用**Logstash配置文件管理工具**(如Puppet/Ansible)实现配置版本控制[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值