资讯专栏INFORMATION COLUMN

基于Centos7的ELK + filebeat日志分析(java weblogic平台)搭建实战

cgh1999520 / 3633人阅读

摘要:踩过的坑国内好多早期的应用系统都是采用中文编码,现在估计也是一大坨,这会导致应用程序的在写日期时,使用中文格式,例如,本次遇到的一月,内部以统一使用编码,且不支持中文字符转时间类型。

网上有很多的ELK搭建教程,但大多数文章介绍的ELK版本比较旧,内容也比较零散。本文基于最新版本的elastic日志集中分析套件,以及redis作为缓冲,完整记录一套ELK架构搭建过程。并实现了对生产环境核心系统使用的Oracle weblogic + java system out日志的分析、处理。
根据官方的介绍,已推荐使用filebeat代替logstash的forward功能。所以本次搭建架构功能规划如下:
filebeat:负责日志文件监控与数据采集;
redis:负责日志数据的缓冲;
logstash:负责日志数据的分析、处理;
elasticsearch:日志数据搜索;
kibana:展示

1.系统环境

   CentOS Linux release 7.2.1511

2.Filebeat+ELK 软件包

elasticsearch-5.1.1.rpm
filebeat-5.1.1-x86_64.rpm
kibana-5.1.1-x86_64.rpm
logstash-5.1.1.rpm    
redis-3.rpm
java-1.8-jdk
download url:https://www.elastic.co/

3.配置过程

Filebeat.yml配置文件

实现对weblogic的access.log,以及系统的nohup,java.system.out.println数据的监控。
日志示例:

accesss.log

10.10.10.10 - - [11/一月/2017:09:24:15 +0800] "POST /hx/common/index.jsp HTTP/1.1" 200 41 

nohup.out

2016-08-24 23:00:31,761 INFO com.xxx.utility.ExeSQL.__AW_getOneValue - ExecSQL : select xxx From yyy where no="00000000000000000000"
2016-08-240.000000000000000000000null
null
2016-08-24 23:00:31,764 INFO com.xxx.utility.ExeSQL.__AW_execSQL - ExecSQL : select xxx From yyyy where no="00000000000000000000"
CalType ===========null
#####calOneDuty:select xxx From yyyy where no=? and pno=mainpno
### BindSQL = select xxx From yyyy where no= "00000000000000000000"  and pno=mainpno
2016-08-24 23:00:31,770 INFO com.xxxx.utility.ExeSQL.__AW_execSQL -

-/etc/filebeat/filebeat.yml

 filebeat.prospectors:
    -
      input_type: log
      paths:
        - /pathto/weblogic/nohup.out
      encoding: gbk
      document_type: javaout
      fields:
        app_id: hxxxt
      multiline.pattern: "^(19|20)dd-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01]) [012][0-9]:[0-6][0-9]:[0-6][0-9]"
      multiline.negate: true
      multiline.match: after
      multiline.max_lines: 1000
      multiline.timeout: 60
    - 
      input_type: log
      paths:
        - /pathto/weblogic/access.log
      encoding: gbk
      document_type: httpdlog
      exclude_lines: ".(gif|css|js|ico) HTTP"
      fields:
        app_id: hxxt
    
    output.logstash:  #系统压力小的可以直接输出到logstash
      hosts: ["localhost:5044"]
    #  enabled: false
      pipelining: 0
      index: "filebeat"
    output.redis: #系统压力大的可以直接输出到redis,再转发logstash
      hosts: ["localhost:6379"]
      key: "filebeat"
      enabled: false   #关闭输出
    output.file:   #主要用于调试
      path: "/tmp"
      filename: filebeat.out
      number_of_files: 7
      rotate_every_kb: 10000 
      enabled: false   #关闭输出
    

logstash配置

logstash本身不带启动脚本,为了便于使用,自己编写了一个启动脚本。

#!/bin/bash
/usr/share/logstash/bin/logstash 
    --path.settings /etc/logstash 
    --config.reload.automatic 
    $@
    

/etc/logstash/conf.d/redis.conf #redis缓存日志配置

input {
    redis {
        data_type => "list" #logstash redis插件工作方式

        key => "filebeat" #监听的键值

        host => "127.0.0.1" #redis地址

        port => 6379 #redis端口号
        add_field => {   #提取filbeat写入redis的日志源主机名json格式,否则output host为空
               host => "%{[beat][hostname]}"       
                  }
    }

}
filter{}
output {
stdout{}

/etc/logstash/conf.d/beat.conf #filebeat 配置匹配httpdlog中文日期格式

input {
    beats {
        port => "5044"
    }
}

filter {

  if [type] == "javaout" {
    grok {
       match => { "message" => "(%{TIMESTAMP_ISO8601:logdatetime} %{LOGLEVEL:level} %{JAVAFILE:class} - %{GREEDYDATA:logmessage})|%{GREEDYDATA:logmessage}" }
       remove_field => [ "message" ]
    }
    date {
      timezone => "Asia/Shanghai"
      match => ["logdatetime","yyyy-MM-dd HH:mm:ss,SSS"]
      remove_field => [ "logdatetime" ]
    }
  }
  if [type] == "httpdlog" {
    #replace access log chinese charset month word,charset zh_cn.utf-8
      mutate { gsub => [
      "message","u4E00u6708","Jan",
      "message","u4E8Cu6708","Fed",
      "message","u4E09u6708","Mar",
      "message","u56DBCu6708","Apr",
      "message","u4E94u6708","May",
      "message","u516DCu6708","June",
      "message","u4E03u6708","July",
      "message","u516Bu6708","Aug",
      "message","u4E5Du6708","Sept",
      "message","u5341u6708","Oct",
      "message","u5341u4E00u6708","Nov",
      "message","u5341u4E8Cu67082","Dec" ] }

    grok {
      match => { "message" => "%{COMMONAPACHELOG}" }
      remove_field => [ "message" ]
    }
    mutate {
      gsub => ["request", "?.*$",""]
    }
    date {
      locale => "en"
      timezone => "Asia/Shanghai"
      match => ["timestamp","dd/MMM/yyyy:HH:mm:ss Z"]
      remove_field => [ "timestamp" ]
   }

  }
}

output {
elasticsearch {
        hosts => ["127.0.0.1:9200"]
        index => "%{type}-%{+YYYY.MM.dd}"
        document_type => "%{type}"
        #flush_size => 2000
        #idle_flush_time => 10
        #sniffing => true
        #template_overwrite => true
    }
file {  #主要用于调试
  path => "/tmp/logstash.out"
 }
}

Elastic与kibana、redis默认配置即可

4.启动相应软件

systemctl start elasticsearch
systemctl start kibana
nohup bin/logstash.sh &
systemctl start redis
systemctl start filebeat

5.登录kibana,查看

http://host-severip:5601

5。 踩过的坑:
1、国内好多早期的应用系统都是采用中文GBK编码,(现在估计也是一大坨),LANG=zh_CN.GBK,这会导致应用程序的在写日期时,使用中文格式,例如,本次遇到的“11/一月/2017:09:24:15 +0800”,ELK内部以统一使用UTF8编码,且不支持中文字符转时间类型。郁闷了很久,想自己写插件的心都有,后来通过在filebeat设置字符集转换为utf8的,使用unicode regexp匹配,才解决。

参考资料:

https://technology.amis.nl/20...
https://kuther.net/blog/index...
http://www.learnes.net/index....
https://www.elastic.co/
https://github.com/logstash-p...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/34123.html

相关文章

  • 基于Centos7ELK + filebeat日志分析java weblogic平台搭建实战

    摘要:踩过的坑国内好多早期的应用系统都是采用中文编码,现在估计也是一大坨,这会导致应用程序的在写日期时,使用中文格式,例如,本次遇到的一月,内部以统一使用编码,且不支持中文字符转时间类型。 网上有很多的ELK搭建教程,但大多数文章介绍的ELK版本比较旧,内容也比较零散。本文基于最新版本的elastic日志集中分析套件,以及redis作为缓冲,完整记录一套ELK架构搭建过程。并实现了对生产环境...

    gxyz 评论0 收藏0
  • Linux ELK 安装(服务器架设篇)

    摘要:新增了一个,它是一个轻量级的日志收集处理工具,占用资源少,适合于在各个服务器上搜集日志后传输给,官方也推荐此工具。具体的结构如下主机系统部署服务安装准备是需要的,建议安装。先下载通用安装包。 ELK简介 ELK是三个开源软件的缩写,分别表示:Elasticsearch , Logstash, Kibana , 它们都是开源软件。新增了一个FileBeat,它是一个轻量级的日志收集处理工...

    funnyZhang 评论0 收藏0
  • 日志平台(网关层) - 基于Openresty+ELKF+Kafka

    摘要:现在用方式调用接口,中使用方式输入内容日志平台网关层基于。日志平台网关层基于到此为止,提取经过网关的接口信息,并将其写入日志文件就完成了,所有的接口日志都写入了文件中。 背景介绍 1、问题现状与尝试 没有做日志记录的线上系统,绝对是给系统运维人员留下的坑。尤其是前后端分离的项目,后端的接口日志可以解决对接、测试和运维时的很多问题。之前项目上发布的接口都是通过Oracle Service...

    yvonne 评论0 收藏0
  • 日志平台(网关层) - 基于Openresty+ELKF+Kafka

    摘要:现在用方式调用接口,中使用方式输入内容日志平台网关层基于。日志平台网关层基于到此为止,提取经过网关的接口信息,并将其写入日志文件就完成了,所有的接口日志都写入了文件中。 背景介绍 1、问题现状与尝试 没有做日志记录的线上系统,绝对是给系统运维人员留下的坑。尤其是前后端分离的项目,后端的接口日志可以解决对接、测试和运维时的很多问题。之前项目上发布的接口都是通过Oracle Service...

    xumenger 评论0 收藏0
  • 最新Centos7.6 部署ELK日志分析系统

    摘要:下载创建用户并授权主节点解压修改配置文件手动启动命令启动文件节点手动启动命令启动文件节点手动启动命令启动文件下载目录如下,默认配置即可手动启动命令 下载elasticsearch 创建elk用户并授权 useradd elk chown -R elk:elk /home/elk/elasticsearch chown -R elk:elk /home/elk/elasticsearch...

    wmui 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<