设为首页 收藏本站
查看: 744|回复: 0

[经验分享] ELKstack

[复制链接]

尚未签到

发表于 2018-12-2 07:56:43 | 显示全部楼层 |阅读模式
前言
  ELKstack抓取分析应用日志的前提是开发要将日志的输出格式改成json格式,否则产出的日志很难进行分析。
  主要流程: tomcat通过log4j输出日志-->  logstash接收数据并发送到redis -->  logstash从redis获取数据并写入es
tomcat怎样输出应用日志?
tomcat7.0配置log4j日志
  详细文档http://tomcat.apache.org/tomcat-7.0-doc/logging.html
一、创建log4j.properties文件
  在$CATALINA_BASE/lib文件夹下,新建log4j.properties文件,内容如下
  log4j.rootLogger = INFO, CATALINA
# Define all the appenders
log4j.appender.CATALINA = org.apache.log4j.DailyRollingFileAppender
log4j.appender.CATALINA.File = ${catalina.base}/logs/catalina
log4j.appender.CATALINA.Append = true
log4j.appender.CATALINA.Encoding = UTF-8
# Roll-over the log once per day
log4j.appender.CATALINA.DatePattern = '.'yyyy-MM-dd'.log'
log4j.appender.CATALINA.layout = org.apache.log4j.PatternLayout
log4j.appender.CATALINA.layout.ConversionPattern = %d [%t] %-5p %c- %m%n
log4j.appender.LOCALHOST = org.apache.log4j.DailyRollingFileAppender
log4j.appender.LOCALHOST.File = ${catalina.base}/logs/localhost
log4j.appender.LOCALHOST.Append = true
log4j.appender.LOCALHOST.Encoding = UTF-8
log4j.appender.LOCALHOST.DatePattern = '.'yyyy-MM-dd'.log'
log4j.appender.LOCALHOST.layout = org.apache.log4j.PatternLayout
log4j.appender.LOCALHOST.layout.ConversionPattern = %d [%t] %-5p %c- %m%n
log4j.appender.MANAGER = org.apache.log4j.DailyRollingFileAppender
log4j.appender.MANAGER.File = ${catalina.base}/logs/manager
log4j.appender.MANAGER.Append = true
log4j.appender.MANAGER.Encoding = UTF-8
log4j.appender.MANAGER.DatePattern = '.'yyyy-MM-dd'.log'
log4j.appender.MANAGER.layout = org.apache.log4j.PatternLayout
log4j.appender.MANAGER.layout.ConversionPattern = %d [%t] %-5p %c- %m%n
log4j.appender.HOST-MANAGER = org.apache.log4j.DailyRollingFileAppender
log4j.appender.HOST-MANAGER.File = ${catalina.base}/logs/host-manager
log4j.appender.HOST-MANAGER.Append = true
log4j.appender.HOST-MANAGER.Encoding = UTF-8
log4j.appender.HOST-MANAGER.DatePattern = '.'yyyy-MM-dd'.log'
log4j.appender.HOST-MANAGER.layout = org.apache.log4j.PatternLayout
log4j.appender.HOST-MANAGER.layout.ConversionPattern = %d [%t] %-5p %c- %m%n
log4j.appender.CONSOLE = org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Encoding = UTF-8
log4j.appender.CONSOLE.layout = org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern = %d [%t] %-5p %c- %m%n
# Configure which loggers log to which appenders
log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost] = INFO, LOCALHOST
log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager] =\
INFO, MANAGER
log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager] =\
INFO, HOST-MANAGER二、下载jar包
(一)log4j.jar(1.2.x版本)
  http://mvnrepository.com/artifact/log4j/log4j/1.2.17
(二)tomcat-juli.jar、tomcat-juli-adapters.jar
  http://tomcat.apache.org/download-70.cgi
  注意:下载时一定要下载"extras"的包,它与自带的包有区别,官方说明:
  This tomcat-juli.jar differs from the default one. It contains the full Apache Commons Logging implementation and thus is able to discover the presence of log4j and configure itself.
三、替换jar包
  将log4j.jar、tomcat-juli-adapters.jar放入$CATALINA_BASE/lib目录
  将下载的tomcat-juli.jar替换$CATALINA_HOME/bin目录下的tomcat-juli.jar
  注意:两个包放置的位置是不同的
四、删除logging.properties
  删除tomcat默认的日志文件$CATALINA_BASE/conf/logging.properties文件
五、启动tomcat
  启动后在$CATALINA_BASE/logs目录下就能看到log4j输出的日志
  

开发自定义应用日志输出
  一般开发java程序,运行tomcat在应用上,日志格式定义普遍放在工程下:WEB-INF/class 目录下,一般都叫做log4j.properties
  作者使用的logstash版本为2.3 ,属于最新版,如果小伙伴借鉴时出现异常,可以看下版本,对比官方文档。
  让开发在log4j.properties中做以下更改就可:
#log4j.rootLogger = [ level ] , appenderName, appenderName, ...
log4j.rootLogger = info,console,infoR,errorR,logstash
#branch logger
log4j.logger.org.springframework=WARN
#log4j.logPath
log4j.logPath=/opt/tomcat_xxxxxweb/log
#console
log4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.console.layout = org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern = [%p] %d{yyyy-MM-dd HH:mm:ss} [%l] %m%n
#infoR
log4j.appender.infoR = org.apache.log4j.DailyRollingFileAppender
log4j.appender.infoR.File =${log4j.logPath}/XXXXXX.log
log4j.appender.infoR.layout = org.apache.log4j.PatternLayout
log4j.appender.infoR.layout.ConversionPattern=[%p] %d{yyyy-MM-dd HH:mm:ss} [%l] %m%n
log4j.appender.infoR.datePattern='.'yyyyMMdd'.log'
log4j.appender.infoR.Threshold = INFO
#errorR
log4j.appender.errorR = org.apache.log4j.DailyRollingFileAppender
log4j.appender.errorR.File =${log4j.logPath}/XXXXXError.log
log4j.appender.errorR.layout = org.apache.log4j.PatternLayout
log4j.appender.errorR.layout.ConversionPattern=[%p] %d{yyyy-MM-dd HH:mm:ss} [%l] %m%n
log4j.appender.errorR.datePattern='.'yyyyMMdd'.log'
log4j.appender.errorR.Threshold = ERROR
#logstash
log4j.appender.logstash=org.apache.log4j.net.SocketAppender
log4j.appender.logstash.Port=12201
log4j.appender.logstash.RemoteHost=sz-a-xxxxxlogstash01-logstash-xen.xxxxx.com
log4j.appender.logstash.ReconnectionDelay=60000
log4j.appender.logstash.LocationInfo=true
log4j.appender.logstash.Threshold = INFOlogstash如何接受log4j日志并写入redis?
  此处将不再介绍logstash的安装,建议使用yum安装管理,使用起来比较方便。
  可以将logstash配置文件放入/etc/logstash/conf.d 内
logstash配置文件展示:
input {
tcp {
port => "11011"
type => "syslog"
}
log4j {
type => "log4j-json-web"
port=>12202
}
log4j {
type => "log4j-json-tomcat"
port=>12201
}
}
filter {
if [type] == "syslog" {
grok {
match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" }
}
}
if [type] == "log4j-json-web" {
json {
source => "message"
}
}
}
output {
if [type] == "syslog" {
redis {
host => "sz-a-xxxxxredis01-redis-xen.xxxxx.com"
data_type => "list"
key => "logstash:syslog-log"
}
}
if [type] == "log4j-json-web" {
redis {
host => "sz-a-xxxxxredis01-redis-xen.xxxxx.com"
data_type => "list"
key => "logstash:xxxxxweb-web-log"
}
}
if [type] == "log4j-json-tomcat" {
redis {
host => "sz-a-xxxxxredis01-redis-xen.xxxxx.com"
data_type => "list"
key => "logstash:xxxxxweb-tomcat-log"
}
}
}  

  一个logstash进程可以有多个input输入,然后为每个输入设置type属性,此时需要注意!!日志中不要出现type字段,不然是大坑!!!!
  ouput可以通过if语句判断input来源并输出到不同的地方
  redis使用list模式来存储数据,这样就起到缓存的作用,一入一出,不会撑爆redis
  





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-642165-1-1.html 上篇帖子: tomcat sql error:0 SqLState:null 必须执行该语句才能获得结果 下篇帖子: Linode Center OS 6.5(x64) 下快速安装Java Tomcat环境
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表