网络安全分布式

三分钟搭建ELK日志分析平台

2019-01-15  本文已影响95人  灬醉饮千殇

三分钟搭建ELK日志分析平台

初步认识ELK

所谓的ELK就是指三个组件的首字母集合:

Elasticsearch 是一个实时的分布式搜索和分析引擎,它可以用于全文搜索,结构化搜索以及分析。它是一个建立在全文搜索引擎 Apache Lucene 基础上的搜索引擎,使用 Java 语言编写。

Logstash 是一个具有实时渠道能力的数据收集引擎,主要用于日志的收集与解析,并将其存入 ElasticSearch中。

Kibana 是一款基于 Apache 开源协议,使用 JavaScript 语言编写,为 Elasticsearch 提供分析和可视化的 Web 平台。它可以在 Elasticsearch 的索引中查找,交互数据,并生成各种维度的表图。

由于这种架构下,Logstash的压力过大,所以在Logstash的前端加了一层轻量级的日志收集中间件:

引入Filebeat作为日志搜集器,主要是为了解决Logstash开销大的问题。相比Logstash,Filebeat 所占系统的 CPU 和内存几乎可以忽略不计。

因而最终形成的架构图如下:

image

开始搭建

本手册base在你已经有一定的Java编程基础

基础环境

系统环境:Centos6.8(使用vmware12虚拟机)

Java环境:1.8.0_161(由于ELK5.X和6.X版本最低要求是Java8,所以建议配置8以上版本)

软件包相关信息

软件版本:6.5.4

下载地址:

[官网下载地址] https://www.elastic.co/downloads

下载软件集合:Elasticsearch、Kibana、Logstash、FileBeat(都选择linux版的tar包进行下载)

下载后将安装包传输到虚拟机中。

安装开始

解压缩

首先安装解压缩到一个目录下面,个人习惯放在/opt下面

创建用户

因为ElasticSerach运行时不允许以root用户身份的,所以这里需要手动创建用户并分配权限,具体如下:

  1. 创建用户组:groupadd elasticsearch

  2. 创建用户加入用户组:useradd elasticsearch -g elasticsearch

  3. 设置ElasticSerach文件夹为用户elasticsearch所有:

    chown -R elasticsearch.elasticsearch /opt/elasticsearch-6.5.4

修改系统环境
  1. 打开文件/etc/security/limits.conf,添加下面4处内容:

    • soft nofile 65536

    • hard nofile 131072

    • soft nproc 2048

    • hard nproc 4096

  2. 打开文件/etc/sysctl.conf,添加下面内容:vm.max_map_count=65536

  3. 加载sysctl配置,执行命令:sysctl -p

  4. 重启电脑,执行命令:reboot

启动ES
  1. 切换到用户elasticsearch:su elasticsearch

  2. 进入目录/opt/elasticsearch-6.5.4

  3. 执行启动命令:bin/elasticsearch -d,此时会在后台启动elasticsearch(如果启动报错没有权限的话,重新执行上面的chown那部分命令设置权限)

  4. 查看启动日志可执行命令:tail -f /opt/elasticsearch-6.5.4/logs/elasticsearch.log

  5. 执行curl命令检查服务是否正常响应:curl 127.0.0.1:9200,如果成功会有Json报文返回

注:6版本内核的linux系统启动es中会报错,可以通过修改config/elasticsearch.yml来纠正,在文件末尾添加

<pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="shell" contenteditable="true" cid="n173" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; display: block; break-inside: avoid; text-align: left; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); position: relative !important; border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; color: rgb(51, 51, 51); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">bootstrap.memory_lock: false
bootstrap.system_call_filter: false</pre>

配置启动Logstash
  1. 在目录/opt/elasticsearch-6.5.4下创建文件default.conf,内容如下

    <pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="" contenteditable="true" cid="n190" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; display: block; break-inside: avoid; text-align: left; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); position: relative !important; border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit;"># 监听5044端口作为输入
    input {
    beats {
    port => "5044"
    }
    }

    数据过滤

    filter {
    grok {
    match => {
    "message" => "%{COMBINEDAPACHELOG}"
    }
    }
    geoip {
    source => "clientip"
    }
    }

    输出配置为本机的9200端口,这是ElasticSerach服务的监听端口

    output {
    elasticsearch {
    hosts => ["127.0.0.1:9200"]
    }
    }</pre>

  2. 后台启动Logstash服务nohup bin/logstash -f default.conf –config.reload.automatic &

  3. 查看启动日志:tail -f nohup.out,看到successfully就表明启动成功

配置启动FileBeat
  1. 修改配置文件filebeat.yml,主要修改两个部分:日志存放位置以及输出

    <pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="shell" contenteditable="true" cid="n225" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; display: block; break-inside: avoid; text-align: left; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); position: relative !important; border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit;">- type: log

    Change to true to enable this prospector configuration.

    enabled: True

    Paths that should be crawled and fetched. Glob based paths.

    读取 Nginx 的日志

    paths:

    • /var/logs/*.log

    输出到本机的 LogStash

    output.logstash:

    The Logstash hosts

    hosts: ["localhost:5044"]
    ​</pre>

  2. 配置完成后,启动Filebeat

    <pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="" contenteditable="true" cid="n231" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; display: block; break-inside: avoid; text-align: left; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); position: relative !important; border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit;"># FileBeat 需要以 root 身份启动,因此先更改配置文件的权限
    sudo chown root filebeat.yml
    sudo ./filebeat -e -c filebeat.yml -d "publish"</pre>

配置启动Kibana
  1. 进入Kibana的目录:/opt/kibana-6.5.4-linux-x86_64

  2. 修改配置文件config/kibana.yml,修改服务器主机名为相应的ip或者域名

    <pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="" contenteditable="true" cid="n249" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; display: block; break-inside: avoid; text-align: left; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); position: relative !important; border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit;">server.host: "192.168.21.128"</pre>

  3. 执行启动命令:nohup bin/kibana &

  4. 查看启动日志:tail -f nohup.out

  5. 在浏览器访问http://[ip]:5601

汉化Kibana
  1. 下载

    [汉化包] https://github.com/anbai-inc/Kibana_Hanization

  2. 上传至服务器然后解压unzip kibana-hanhua.zip

  3. 开始汉化,注意python的版本不能过高,3.6的版本我试过是汉化不了的,换成2.7的可以了

    <pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="python" contenteditable="true" cid="n285" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; display: block; break-inside: avoid; text-align: left; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); position: relative !important; border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit;">python main.py /home/kibana-6.2.3/</pre>

最后启动Kibana就可以看到汉化的界面

上一篇下一篇

猜你喜欢

热点阅读