ElasticStack搭建Java日志收集分析,并将其构建docker镜像-学习笔记

参考视频(ElasticStack)https://www.bilibili.com/video/av53652729

                 (Docker)           https://www.bilibili.com/video/av27122140

Docker官网   docker.com

ElasticStack官网 elastic.co  -- 有中文

整套跑下来大概需要使用2G以上内存,内存不足的服务器不用试了

整套部署下来需要很清晰的思路,否则极易失败,建议把ElasticStack了解一遍再开始

整个过程为

    Filebeat 收集文件  --解析并传输给 -- Logstash --解析并传输给 -- Elasticsearch 建立完整文件模式 -- Kibana关联展示 

所需安装包

    JDK1.8+  Filebeat7.5.1 + Logstash7.5.1 + ElasticStack7.5.1 + Kibana7.5.1

ElasticStack各组件需要版本统一

首先下载安装Docker.如果不使用docker记得给elasticsearch新建用户后,将新建用户禁止登陆服务器ssh

Docker 安装文档地址 https://docs.docker.com   根据操作系统选择文档

这里选择Linux-Centos,需要先删除已安装Docker,未安装则忽略,删除时可以使用以下命令,按步骤安装即可

apt-get remove docker*

 Docker安装好后最好配置一下镜像加速不然很多东西下不动,注册登录阿里云,搜索容器镜像服务-镜像加速器,里面有详细介绍

 

常规下载方法估计一天也下载不完,在Linux中使用命令下载稍快一些

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.5.1-linux-x86_64.tar.gz

wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.5.1-linux-x86_64.tar.gz

wget https://artifacts.elastic.co/downloads/logstash/logstash-7.5.1.tar.gz

wget https://artifacts.elastic.co/downloads/kibana/kibana-7.5.1-linux-x86_64.tar.gz

Docker准备工作,宿主机上安装JDK  上面4个gz安装包,提前编写好的组件配置文件,安装好再改也行,将这些东西放在同一文件夹

构建镜像   下面为Dockerfile 文件内容

FROM ubuntu

MAINTAINER author
EXPOSE 5601

ENV MYPATH=/usr/local
ENV JAVA_HOME=/usr/local/jdk1.8.0_191
ENV JRE_HOME=${JAVA_HOME}/jre
ENV CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH
ENV JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin
ENV PATH=$PATH:${JAVA_PATH}

WORKDIR $MYPATH
ADD *.gz $MYPATH
COPY ./conf/* $MYPATH

CMD /bin/bash

 docker create | docker run 都可以 末尾接上面构建好的镜像名:版本号,最少映射JDK安装路径与目标日志路径

docker run -it --name mydocker -p 5601:5601 -p 9200:9200 -v /var/local/logs/docker/:/var/local/logs/ -v /usr/local/environment/jdk1.8.0_191/:/usr/local/jdk1.8.0_191/ myesimg:1.0.0

 一切顺利的情况下会进入容器/usr/local目录下

Docker容器为最低配linux系统,所以如果需要vi或者其他功能需要安装

 

下面开始 ElasticStack部分

顺序最好是 Elasticsearch -> Kibana -> Logstash -> Filebeat  (此为组件启动顺序)

Elasticsearch 

进入ES的目录,修改配置文件,一般单机版而且不需要外围访问的时候不需要修改配置文件

少数改动为cluster.name-node.name-discovery.seed_hosts-cluster.initial_master_nodes  将这些注释放开

启动ES,ES严格控制启动的用户,不允许root用户使用,低版本可以加参数 -Des.insecure.allow.root=true 启动,

(Kibana启动会使用--allow-root)这个参数不知道在ES启动时是否有用

新建用户和组   将ES整个文件夹权限更新为新用户  使用新用户启动   ./elasticsearch -d 

启动完成 使用curl localhost:9200查看是否成功

Kibana

Kibana配置文件修改 

                server.port: 5601    server.host: "0.0.0.0"  -表示本机  

                elasticsearch.hosts: ["http://localhost:9200"]   --关联ES

启动   nohup ./kibana --allow-root &     启动完成后在浏览器中访问5601端口查看是否正常

Logstash (重点)

新建java-logstash.conf

input {
  beats {
    port => 5044
  }
}

filter {
 # 此处会自动按匹配规则解析message,当然需要符合日志文件的规范以下为 "a : b c d"
  grok { 
    match => { "message" => "%{GREEDYDATA:Timestamp}\ : %{WORD:LogLevel}\ %{GREEDYDATA:ClassName}\ %{GREEDYDATA:TextInformation}" }
  }
  date {
    match => [ "Timestamp", "yyyy-MM-dd HH:mm:ss,SSS" ]
  }
}

output {
#根据filebeat传输过来的数据分索引 传递给Elasticsearch
  if [log_source] == "aaa" {
    elasticsearch {
      hosts => ["http://localhost:9200"]
      index => "java-aaa-%{+YYYY.MM.dd}"
    }
  }
  if [log_source] == "bbb" {
    elasticsearch {
      hosts => ["http://localhost:9200"]
      index => "java-bbb-%{+YYYY.MM.dd}"
    }
  }
}

启动: nohup ./filebeat -f java-logstash.conf --config.reload.automatic &

Filebeat  (重点)

编辑filebeat.yml 

filebeat.inputs:
- type: log
  enable: true
  paths:
   - /var/local/logs/aaa/*.log
  fields:
    log_source: aaa   #自定义字段用于logstash区分来源建索引
  fields_under_root: true
  multiline:       # 将非日期开头的日志向上合并为一条message
    pattern: '^(\d{4}-\d{2}-\d{2})'
    negate: true
    match: after
    max_lines: 500
    timeout: 5s

- type: log
  enable: true
  paths:
   - /var/local/logs/bbb/*.log
  fields:
    log_source: bbb
  fields_under_root: true
  multiline:
    pattern: '^(\d{4}-\d{2}-\d{2})'
    negate: true
    match: after
    max_lines: 500
    timeout: 5s

output.logstash:
  hosts: ["127.0.0.1:5044"]

启动: nohup ./filebeat -e -c ../filebeat.yml &

可以适当调整elasticsearch以及logstash的   jvm.options中的Xms/Xmx属性调整内存值

最后访问kibana

 

 剩下的就是docker commit  && docker push了,以后使用的话只需在仓库中pull docker 镜像,进入镜像启动相关组件就可以使用了,也可以从上面镜像为模板再添加RUN 保留字 重新build一个镜像,这样就不需要进入镜像一个一个启动了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章