美文网首页网络安全分布式
三分钟搭建ELK日志分析平台

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

作者: 灬醉饮千殇 | 来源:发表于2019-01-15 17:38 被阅读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就可以看到汉化的界面

    相关文章

      网友评论

        本文标题:三分钟搭建ELK日志分析平台

        本文链接:https://www.haomeiwen.com/subject/funydqtx.html