ELK分布式日志搭建

ELK实际上是三个工具的集合,Elasticsearch + Logstash + Kibana,
这三个工具组合形成了一套实用、易用的监控架构,很多公司利用它来搭建可视化的海量日志分析平台。

  1. ElasticSearch
    ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。
  2. Logstash
    Logstash是一个用于管理日志和事件的工具,你可以用它去收集日志、转换日志、解析日志并将他们作为数据提供给其它模块调用,例如搜索、存储等。
  3. Kibana
    Kibana是一个优秀的前端日志展示框架,它可以非常详细的将日志转化为各种图表,为用户提供强大的数据可视化支持。

日志收集已经有新出的轻量级工具filebeat可以取代logstash了,这里还是以logstash为例

示例都是安装在一台机器上,需要集群修改相应的ip和端口开放即可。
安装ElasticSearch、 LogStash+FileBeats(选一个即可,filebeats比较轻量)、 Kibana
ElasticSearch、 LogStash、 Kibana三者的版本一定要匹配,版本对不上会报错
这里选择的是6.5.0版本
基于jdk使用,所以要先安装jdk最少1.8版本
安装elasticsearch

sudo wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.5.0.zip
unzip elasticsearch-6.5.0.zip

设置大内存,内存小了会异常:

vi /etc/sysctl.conf 

在最后添加 一行 :vm.max_map_count=655360
加载参数 :sysctl -p
创建elsearch用户组及elsearch用户:

groupadd elsearch
useradd elsearch -g elsearch
passwd elsearch

更改elasticsearch文件夹及内部文件的所属用户及组为elsearch:elsearch

cd elasticsearch-6.5.0/ 
./bin/elasticsearch

没报错就成功,报错一般只有一下情况
1.用root用户运行了,一定要普通用户
2.jdk不是1.8及以上
3.内存过小
需要后台运行:./bin/elasticsearch -d #以守护进程方式启动Elasticsearch ,必须普通用户执行,否则启动失败。

安装logstash

sudo wget https://artifacts.elastic.co/downloads/logstash/logstash-6.5.0.tar.gz
cd logstash-6.5.0/

添加logstash.conf文件:

vim logstash.conf
input {
            file {
                    path => "替换应用的log路径,多个路径可以用正则匹配"
                    start_position => "beginning" #从文件开始处读写
            }
    #       stdin {}  #可以从标准输入读数据
    }
    # 数据过滤,暂时未用到filter
    filter {
      #定义数据的格式
      grok {
         //暂时未用到
      }
      #定义时间戳的格式
      date {
        match => [ "timestamp", "yyyy-MM-dd-HH:mm:ss" ]
        locale => "cn"
      }
      #定义客户端的IP是哪个字段(上面定义的数据格式)
      geoip {
        source => "clientIp"
      }
      mutate {
          rename => { "host" => "host.name" }
      }
    }
    # 输出到本机的 ES
    output {
        elasticsearch {
                hosts => [ "127.0.0.1:9200"  ]
    
        }    
    }

bin/logstash -f logstash.conf --config.reload.automatic

后台运行方式:nohup ./bin/logstash -f config/logstash.conf > myout.log 2>&1 &

安装kibana

sudo wget https://artifacts.elastic.co/downloads/kibana/kibana-6.5.0-linux-x86_64.tar.gz
 tar -xzf kibana-6.5.0-linux-x86_64.tar.gz
 cd kibana-6.5.0-linux-x86_64/ 

修改外网访问:

vim  config/ kibana.yml

修改这句:

server.host: "0.0.0.0"

启动

bin/kibana

没报错即成功了,端口默认是5601
后台运行方式:nohup ./bin/kibana > kibanaout.log 2>&1 &
由于kibana是运行在node上,所以使用ps -ef|grep 是看不到进程了,使用下面的方式查看
netstat -tunlp|grep 5601 查找kibana进程

访问kibana,在discover中添加索引,选择时间,即可看到tomcat的日志,但是格式上还有问题,需要优化。

日志最好是提前格式化:
Nginx的http模块中加入:

http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
          log_format json '{"@timestamp":"$time_iso8601",'
                           '"@version":"1",'
                           '"client":"$remote_addr",'
                           '"url":"$uri",'
                           '"status":"$status",'
                           '"domain":"$host",'
                           '"host":"$server_addr",'
                           '"size":$body_bytes_sent,'
                           '"responsetime":$request_time,'
                           '"referer": "$http_referer",'
                           '"ua": "$http_user_agent"'
               '}';

Server模块中加入:

 access_log  /var/log/nginx/access_json.log  json;

日志输出到json格式,重启nginx.
Tomcat日志修改:

#注释原有日志
        <!-- Access log processes all example.
             Documentation at: /docs/config/valve.html
             Note: The pattern used is equivalent to using pattern="common" -->
<!--        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log." suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />
-->
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="tomcat_access_log" suffix=".log"
               pattern="{&quot;clientip&quot;:&quot;%h&quot;,&quot;ClientUser&quot;:&quot;%l&quot;,&quot;authenticated&quot;:&quot;%u&quot;,&quot;AccessTime&quot;:&quot;%t&quot;,&quot;method&quot;:&quot;%r&quot;,&quot;status&quot;:&quot;%s&quot;,&quot;SendBytes&quot;:&quot;%b&quot;,&quot;Query?string&quot;:&quot;%q&quot;,&quot;partner&quot;:&quot;%{Referer}i&quot;,&quot;AgentVersion&quot;:&quot;%{User-Agent}i&quot;}"/>

重启tomcat。

修改Logstash.conf

input {
    file {
      path => "/var/log/messages"
      type => "system"
      start_position => "beginning"
}
    file {
      path => "/apps/tomcat/logs/tomcat_access_log*.log"
      type => "tomcat-log"
      start_position => "beginning"
      stat_interval => "2"
    }
       file {
       path => "/var/log/nginx/access_json.log"
       codec => json
       start_position => "beginning"
       type => "nginx-log"
    }
}
output {
     
    if [type] == "system"{
        elasticsearch {
           hosts => ["127.0.0.1:9200"]
           index => "systemlog-%{+YYYY.MM.dd}"
        }
}
  if [type] == "tomcat-log"{
        elasticsearch {
           hosts => ["127.0.0.1:9200"]
           index => "tomcat-log-%{+YYYY.MM.dd}"
        }
    }

  
       if [type] == "nginx-log"{
        elasticsearch {
           hosts => ["127.0.0.1:9200"]
           index => "nginx-log-%{+YYYY.MM.dd}"
        }
    }
}

重启logstash,然后在kibana页面中新建nginx-log(tomcat可以一样新建)的索引,即可查询到日志,先访问几次nginx,生成几条日志,可以看到日志按照我们定义的格式生成
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值