ELK实战

           架构说明:https://blog.csdn.net/beyond_qjm/article/details/81941820

 

一、基本架构

 ELK实战_第1张图片

二、Filebeat安装

服务器 安装根目录
172.17.0.153 /opt/filebeat-6.2.3-linux-x86_64
172.17.0.154 /opt/filebeat-6.2.3-linux-x86_64
172.17.0.155 /opt/filebeat-6.2.3-linux-x86_64
172.17.0.156 /opt/filebeat-6.2.3-linux-x86_64

安装教程:https://blog.csdn.net/beyond_qjm/article/details/81944486

整合配置:

filebeat.prospectors:
- type: log
  enabled: true # 开关
  paths: # 日志文件路径,可以用用通配符
    - /logs/access/access*  #访问记录 
    #- c:\programdata\elasticsearch\logs\*  如果是windows服务器,用这个路径
  fields_under_root: true
  multiline: # 日志多行处理,列如java的堆栈信息
      pattern: ^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3} # 匹配ip
      negate: true
      match: after
  fields: # 自定义属性,用于 Logstash 中
     log_type: access # 日志文件类型
     server_id: 172.17.0.153 # 服务器ip地址
  scan_frequency: 120s #扫描间隔,单位为秒;设置太小会引起filebeat频繁扫描文件,导致cpu占用百分比过高
  tail_files: false #是否是从文件尾部开始监听
  backoff: 30s #文件检查间隔时间
  max_backoff: 60
  tail_files: true
 

- type: log
  enabled: true
  paths:
    - /logs/console/console*  #log日志
  fields_under_root: true
  multiline:
      pattern: ^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}
      negate: true
      match: after
  fields:
     log_type: console
     server_id: 172.17.0.153
  scan_frequency: 120
  tail_files: false #是否是从文件尾部开始监听
  backoff: 30s #文件检查间隔时间
  max_backoff: 60
  tail_files: true


output.logstash: # 输出到logstash的安装位置,以及监听的端口
  hosts: ["172.17.0.184:9988"]

三、Logstash安装

服务器 安装根目录
172.17.0.184 /home/elk/logstash-6.2.3/

安装教程:https://blog.csdn.net/beyond_qjm/article/details/81945527

整合配置:

    1. 添加 /home/elk/logstash-6.2.3/bin/config/log4j.cfg

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

filter{
        grok{
                match => [
                        "message" , "%{TIMESTAMP_ISO8601:time} %{DATA:thread} %{LOGLEVEL:level}  %{JAVACLASS:class} : %{GREEDYDATA:info}",

                        "message" , "%{TIMESTAMP_ISO8601:time} %{DATA:thread} %{LOGLEVEL:level} %{JAVACLASS:class} : %{GREEDYDATA:info}",
                        "message" , "%{URIHOST:visitHost} - - \[%{HTTPDATE:time}\] \"%{CISCO_REASON:method} %{URIPATHPARAM:request} %{SYSLOGPROG:protocol}\" %{NUMBER:responseCode:int} %{NUMBER:responseTime:int}"
                ]
        }

        date { 
                match => [
                        "time", "dd/MMM/yyyy:HH:mm:ss Z",
                        "yyyy-MM-dd HH:mm:ss.SSS",
                        "yyyy-MM-dd HH:mm:ss"
                ]
                target => "@timestamp"
                locale => "cn"
        }

        mutate{
                remove_field => ["@version","_score","_id","program","time","beat","offset","prospector","host","message","tags"]
        }

}


output{
        #file{path=>"/home/elk/out.log"}
        stdout{codec=>rubydebug}

        if [log_type] == "console" and [info] =~ /^\S/ {
                elasticsearch{
                        hosts => ["172.17.0.183:9200"]
                        index => "console-%{+YYYY.MM}"
                        manage_template => true
                        template_name => "console"
                        template_overwrite => true
                        template => "/home/elk/logstash-6.2.3/bin/config/console.json"
                }
        }

        if [log_type] == "access" {
                elasticsearch{
                        hosts => ["172.17.0.183:9200"]
                        index => "access-%{+YYYY.MM}"
                        manage_template => true
                        template_name => "access"
                        template_overwrite => true
                        template => "/home/elk/logstash-6.2.3/bin/config/access.json"
                }
        }
}

 
 

    2. 添加 /home/elk/logstash-6.2.3/bin/config/laccess.json

{
    "template": "access*",
    "settings": {
        "index.number_of_shards": 5,
        "number_of_replicas": 1
    },
    "mappings": {
        "access": {
            "_all": {
                "enabled": false
            },
            "properties": {
                "@timestamp": {
                    "type": "date",
                },
                "server_id": {
                    "type": "string",
                    "index": "not_analyzed"
                },
                "source": {
                    "type": "string",
                    "index": "not_analyzed"
                },
                "visitHost": {
                    "type": "string",
                    "index": "not_analyzed"
                },
                "method": {
                    "type": "string",
                    "index": "not_analyzed"
                },
                "request": {
                    "type": "string",
                    "index": "analyzed"
                },
                "protocol": {
                    "type": "string",
                    "index": "not_analyzed"
                },
                "responseCode": {
                    "type": "integer",
                    "index": "not_analyzed"
                },
                "responseTime": {
                    "type": "integer",
                    "index": "not_analyzed"
                },
                "log_type": {
                    "type": "string",
                    "index": "not_analyzed"
                }
            }
        }
    }
}

    3. 添加 /home/elk/logstash-6.2.3/bin/config/console.json

{
    "template": "console*",
    "settings": {
        "index.number_of_shards": 5,
        "number_of_replicas": 1
    },
    "mappings": {
        "console": {
            "_all": {
                "enabled": false
            },
            "properties": {
                "@timestamp": {
                    "type": "date",
                },
                "server_id": {
                    "type": "string",
                    "index": "not_analyzed"
                },
                "source": {
                    "type": "string",
                    "index": "not_analyzed"
                },
                "thread": {
                    "type": "string",
                    "index": "not_analyzed"
                },
                "level": {
                    "type": "string",
                    "index": "not_analyzed"
                },
                "class": {
                    "type": "string",
                    "index": "not_analyzed"
                },
                "info": {
                    "type": "string",
                    "index": "analyzed"
                },
                "log_type": {
                    "type": "string",
                    "index": "not_analyzed"
                }
            }
        }
    }
}

四、Elasticsearch安装

服务器 安装根目录 节点类型
172.17.0.181 /home/elk/elasticsearch-6.2.3 data
172.17.0.182 /home/elk/elasticsearch-6.2.3 data
172.17.0.183 /home/elk/elasticsearch-6.2.3 master

安装教程:https://blog.csdn.net/beyond_qjm/article/details/81943552

elasticsearch-head安装配置:https://blog.csdn.net/beyond_qjm/article/details/81947181

五、Kibana安装

服务器 安装根目录
172.17.0.183 /home/elk/kibana-6.2.3-linux-x86_64

安装教程:https://blog.csdn.net/beyond_qjm/article/details/81946384

整合配置:

    修改 /home/elk/kibana-6.2.3-linux-x86_64/config/kibana.yml 中的  server.host: "172.17.0.183"

六、log日志配置

    1. Spring boot - logback(Spring boot项目)

           (1)配置系统环境

 

ELK实战_第2张图片

           dev、test为测试环境,prod为生产环境

           (2)在resource目录下添加logback-spring.xml 配置文件

                   需要修改属性 APP_NAME 改为当前项目名,用对区别不同系统的日志

 



    logback-demo

    
    
    
    

    
    
        
        
            
                
                %d{yyyy-MM-dd HH:mm:ss.SSS} %thread %-5level %c : %msg%n
            
        
    

    
    
        
        

        
        

        
        
            
            ${LOG_HOME}/console_${APP_NAME}_%d{yyyy-MM-dd}.log
            
            90
            
            
        

        
        
            UTF-8
            %d{yyyy-MM-dd HH:mm:ss.SSS} %thread %-5level %c : %msg%n
        
    

    
    
    
        
            
            
        
    

    
    
        
            
        
    

         (3)加载logback配置文件

 

ELK实战_第3张图片

2. 整合log4j 

           (1)修改pom.xml文件

                    Springboot项目



   org.springframework.boot
   spring-boot-starter
   
     
         org.springframework.boot
         spring-boot-starter-logging
     

   




   org.springframework.boot
   spring-boot-starter-log4j
   1.3.8.RELEASE

                  非 Springboot项目



   org.slf4j
   slf4j-api
   1.7.21


   org.slf4j
   slf4j-log4j12
   1.7.21


   commons-logging
   commons-logging
   1.2

           (2)加入log4j.properties

                      将duban-home修改为当前项目名,用对区别不同系统的日志

log4j.rootLogger=info,ServerDailyRollingFile,stdout

 

log4j.appender.ServerDailyRollingFile=org.apache.log4j.DailyRollingFileAppender

log4j.appender.ServerDailyRollingFile.DatePattern='-'yyyy-MM-dd'.log'

log4j.appender.ServerDailyRollingFile.File=/logs/console/console_duban-home

log4j.appender.DAILY_ROLLING_FILE.Append=true

log4j.appender.ServerDailyRollingFile.layout=org.apache.log4j.PatternLayout

log4j.appender.ServerDailyRollingFile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss.SSS} %t %-5p %c : %m%n

log4j.appender.ServerDailyRollingFile.Append=true

 

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss.SSS} %t %-5p %c : %m%n

3. Tomcat access访问日志

           Tomcat中默认的情况下,access log是没有设置的。在server.xml文件中配置如下。

  

         

          改为

                    1. prefix中的duban-home为服务器名,用于识别不同的服务器

                    2. pattern为输出格式

  

        

       

              prefix="access_duban-home_log." suffix=".txt" pattern="%h - - %t "%r" %s %D" resolveHosts="false"/>  

       

                    pattern说明

 

pattern属性值由字符串常量和pattern标识符加上前缀"%"组合而成。pattern标识符加上前缀"%",用来代替当前请求/响应中的对应的变量值。目前支持如下的pattern:

· %a - 远端IP地址

· %A - 本地IP地址

· %b - 发送的字节数,不包括HTTP头,如果为0,使用"-"

· %B - 发送的字节数,不包括HTTP头

· %h - 远端主机名(如果resolveHost=false,远端的IP地址)

· %H - 请求协议

· %l - 从identd返回的远端逻辑用户名(总是返回 '-')

· %m - 请求的方法(GET,POST,等)

· %p - 收到请求的本地端口号

· %q - 查询字符串(如果存在,以 '?'开始)

· %r - 请求的第一行,包含了请求的方法和URI

· %s - 响应的状态码

· %S - 用户的session ID

· %t - 日志和时间,使用通常的Log格式

· %u - 认证以后的远端用户(如果存在的话,否则为'-')

· %U - 请求的URI路径

· %v - 本地服务器的名称

· %D - 处理请求的时间,以毫秒为单位

· %T - 处理请求的时间,以秒为单位

 

七、添加为服务

     将以上应用添加为服务方便管理

     教程:https://blog.csdn.net/beyond_qjm/article/details/81947493

 

 

 

 

 

 

 

 

你可能感兴趣的:(ELK)