美文网首页数据库
ELK虚拟机构建

ELK虚拟机构建

作者: _str_ | 来源:发表于2019-11-21 10:35 被阅读0次

    简介
    是一个基于浏览器页面的Elasticsearch前端展示工具,也是一个开源和免费的工具,Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮你汇总、分析和搜索重要数据日志。

    Elasticserach
    是一个基于Lucene的开源分布式搜索服务器。
    特点:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源, 自动搜索负载等。
    它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。
    Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是第二流行的企业搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。
    在elasticsearch中,所有节点的数据是均等的。
    弹性搜索,日志存储
    logstash
    部署在产生日志的应用服务器上,用于收集日志
    是一个完全开源工具,可以对你的日志进行收集、过滤、分析,并将其存储供以后使用(如,搜索),logstash带有一个web界面,搜索和展示所有日志。
    Kibana
    通过WEB页面向用户展示。
    是一个基于浏览器页面的Elasticsearch前端展示工具,也是一个开源和免费的工具,
    Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮你汇总、分析和搜索重要数据日志

    image.png

    如上图:Logstash收集AppServer产生的Log,并存放到ElasticSearch集群中,而Kibana则从ES集群中查询数据生成图表,再返回给Browser。

    产生日志—>收集日志->存储日志->展示日志->查看日志

    环境

    • 操作系统
      centos 7.4
    • 防火墙
      firewalld 关闭
      selinux 关闭
    • 域名解析 /etc/hosts
      elk-node1
      elk-node2
    • 服务器
      elk-node1 192.168.87.129 #master机器
      elk-node2 192.168.87.130 #slave机器
      关于master-salve模式

    master收集到日志后,会把一部分数据碎片到slave上(随机的一部分数据);
    同时,master和slave又都会各自做副本,并把副本放到对方机器上,这样就保证了数据不会丢失。
    如果master宕机了,那么客户端在日志采集配置中将elasticsearch主机指向改为slave,就可以保证ELK日志的正常采集和web展示。

    • 内存
      大于2G

    Elasticsearch

    1、基础环境安装:elk-node1和elk-node2同时操作
    • 1 下载并安装GPG Key
         rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch
    
    • 2 添加yum仓库
    vim /etc/yum.repos.d/elasticsearch.repo
    ----------------------
    [elasticsearch-2.x]
    name=Elasticsearch repository for 2.x packages
    baseurl=http://packages.elastic.co/elasticsearch/2.x/centos
    gpgcheck=1
    gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
    enabled=1
    
    • 3 安装elasticsearch
     yum install -y elasticsearch  redis nginx  java
    
    • 4 安装相关测试软件(略)
    • 5 测试环境
     java -version
    -------------------------
    openjdk version "1.8.0_232"
    OpenJDK Runtime Environment (build 1.8.0_232-b09)
    OpenJDK 64-Bit Server VM (build 25.232-b09, mixed mode)
    
    2、配置部署
    elk-node1 配置
    • 1 修改配置文件
      自定义存储目录
     mkdir -p /data/es-data
    

    修改属组

    [root@elk-node1 ~]- chown  -R elasticsearch.elasticsearch /data/
    

    vim /etc/elasticsearch/elasticsearch.yml //追加配置下面内容

    cluster.name: huanqiu                            # 组名(同一个组,组名必须一致)
    node.name: elk-node1                            # 节点名称,建议和主机名一致
    path.data: /data/es-data                        # 数据存放的路径
    path.logs: /var/log/elasticsearch/         # 日志存放的路径
    bootstrap.mlockall: true                         # 锁住内存,不被使用到交换分区去(通常在内部不足时,休眠的程序内存信息会交换到交换分区)
    network.host: 0.0.0.0                            # 网络设置
    http.port: 9200                                    # 端口
    discovery.zen.ping.multicast.enabled: false    有一个内置的24地址用于组播通信 置为false就关闭了   关闭多播
    discovery.zen.ping.unicast.hosts: ["10.18.41.31","10.18.41.137"]    主服务器和自己的地址
    
    • 2 启动并查看
    [root@elk-node1 ~]# systemctl  start elasticsearch       启动elasticsearch       
    [root@elk-node1 ~]# systemctl enable elasticsearch
    [root@elk-node1 ~]# systemctl  status elasticsearch
    # netstat -antlp |egrep "9200|9300"
    
    • 3 测试
      http://192.168.87.129:9200
    elk-node2配置

    跟上面的node1 配置相同
    只需改一下
    vim /etc/elasticsearch/elasticsearch.yml //追加配置下面内容

    cluster.name: huanqiu                            # 组名(同一个组,组名必须一致)
    node.name: elk-node2                            # 节点名称,建议和主机名一致
    path.data: /data/es-data                        # 数据存放的路径
    path.logs: /var/log/elasticsearch/         # 日志存放的路径
    bootstrap.mlockall: true                         # 锁住内存,不被使用到交换分区去(通常在内部不足时,休眠的程序内存信息会交换到交换分区)
    network.host: 0.0.0.0                            # 网络设置
    http.port: 9200                                    # 端口
    discovery.zen.ping.multicast.enabled: false    有一个内置的24地址用于组播通信 置为false就关闭了   关闭多播
    discovery.zen.ping.unicast.hosts: ["10.18.41.31","10.18.41.137"]    主服务器和自己的地址
    

    3 安装插件1

    elk-node1和elk-node2上都要安装
    两台安装完毕并重启,再来进行访问和数据插入测试

      /usr/share/elasticsearch/bin/plugin install mobz/elasticsearch-head       
    最实用的通过web界面来查看elasticsearch集群状态信息 
    -----------------------
    chown -R elasticsearch:elasticsearch /usr/share/elasticsearch/plugins
    ---------------------
    systemctl  restart  elasticsearch
    

    启动
    http://192.168.87.129:9200/_plugin/head/

    3 安装插件2

     /usr/share/elasticsearch/bin/plugin install lmenezes/elasticsearch-kopf
    ----------------
    chown -R elasticsearch:elasticsearch /usr/share/elasticsearch/plugins
    ----------------
    systemctl  restart  elasticsearch
    

    启动
    http://192.168.87.130:9200/_plugin/kopf

    logstash

    部署在应用服务器上
    elk-node1和elk-node2来模拟应用服务器。与分离部署本质的区别只是上报地址不同。

    • 1 下载并安装GPG Key
    rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch
    
    • 2 添加yum仓库
    - vim /etc/yum.repos.d/logstash.repo
    [logstash-2.1]
    name=Logstash repository for 2.1.x packages
    baseurl=http://packages.elastic.co/logstash/2.1/centos
    gpgcheck=1
    gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
    enabled=1
    
    • 3 安装logstash
    -  yum install -y logstash       126M大小
    
    • 4 logstash启动(略)
      集群配置需要重启。测试环境单机重启没有必要
    - systemctl start elasticsearch
    - systemctl status elasticsearch
    
    • 5 数据收集测试1:命令行单行操作
      --- 5.1 基本的输入输出
     /opt/logstash/bin/logstash -e 'input { stdin{} } output { stdout{} }'
    命令解释
            -e  执行。(后期用-f带脚本的形式执行)
            input{}  输入函数
            output{} 输出函数
            stdin{} 标准输入
            stdout{} 标准输出
    

    --- 5.2 使用rubydebug详细输出

     /opt/logstash/bin/logstash -e 'input { stdin{} } output { stdout{ codec => rubydebug} }'
    -------------------
    输出形式
    {
           "message" => "123456789",
          "@version" => "1",
        "@timestamp" => "2019-11-10T09:34:00.999Z",
              "host" => "localhost.localdomain"
    }
    

    --- 5.3 把内容写到elasticsearch中

     /opt/logstash/bin/logstash -e 'input { stdin{} } output {  elasticsearch { hosts => ["192.168.87.129:9200"]} }'
    
    image.png

    ---- 5.4 即写到elasticsearch中又写在文件中一份

    # /opt/logstash/bin/logstash -e 'input { stdin{} } output {  elasticsearch { hosts => ["192.168.87.129:9200"]} stdout{ codec =>  rubydebug}}'
    
    
    • 6 数据收集测试2:logstash的配置文件的编写
      --- 6.1 简单的配置方式
      ---6.1.1 编写logstash的配置文件
    - vim /etc/logstash/conf.d/01-logstash.conf
    input { stdin { } }
    output {
            elasticsearch { hosts => ["192.168.1.160:9200"]}
            stdout { codec => rubydebug }
    }
    
    • --- 6.1.2 执行
       /opt/logstash/bin/logstash -f /etc/logstash/conf.d/01-logstash.conf
    

    --- 6.2 收集系统日志
    1)编写logstash的配置文件
    logstash收集文件的时候默认是从最后收集的,需要指定一下开始位置
    logstash只会从最后寻找相比于上一次更新过的日志收集起来

    - vim  file.conf
    input {
        file {
          path => "/var/log/messages"
          type => "system"
          start_position => "beginning"  
        }
    }
    output {
        elasticsearch {
               hosts => ["192.168.1.160:9200"]
               index => "system-%{+YYYY.MM.dd}"    
        }
    }
    

    2)执行

    - /opt/logstash/bin/logstash -f file.conf &
    如果中断,就表示日志不在收集!所以需要放在后台执行~
    
    • 6.3 收集java日志
      1)编写logstash的配置文件
     - vim  file.conf
    ` 多输入源,就多写几个input   请替换掉hosts地址 注意日志文件是否存在  type名称需要小写 `
    input {
        file {
          path => "/var/log/messages"
          type => "system"
          start_position => "beginning"
        }
    }
    input {
        file {
           path => "/var/log/elasticsearch/huanqiu.log"
           type => "es-error"
           start_position => "beginning"
        }
    }
    output {
     
        if [type] == "system"{
            elasticsearch {
               hosts => ["192.168.87.129:9200"]
               index => "system-%{+YYYY.MM.dd}"
            }
        }
        if [type] == "es-error"{
                elasticsearch {
                   hosts => ["192.168.87.129:9200"]
                   index => "es-error-%{+YYYY.MM.dd}"
                }
            }
    }
    
    ---注意
    如果你的日志中有type字段 那你就不能在conf文件中使用type
    

    2)执行

    -  /opt/logstash/bin/logstash -f file.conf &
    

    4)多行模式

    [root@elk-node1 ~]# vim multiline.conf
    input {
        stdin {
           codec => multiline {        //多行模式。碰到指定模式之前,日志为无效。遇见模式时,才将模式之前的信息,收集成日志。
              pattern => "^\["        //模式
              negate => true        //无效
              what => "previous"     //之前
            }
        }
    }
    output {
        stdout {
          codec => "rubydebug"
         } 
    }
    

    执行命令:

     /opt/logstash/bin/logstash -f multiline.conf
    -----------
    在没有遇到[的时候,系统不会收集,只有遇见[的时候,才算是一个事件,才收集起来。
    一般很少用到
    
    • 7 模块总结
      --- stdin logstash从标准输入中收集日志
      --- stdout
      --- file logstash从日志文件中收集日志
      --- syslog logstash从系统日志程序中收集日志
      --- tcp logstash从TCP程序端口中收集日志
      --- udp logstash从UDP程序端口中收集日志
      --- rubuydebug 通过rubuy库进行收集
      --- multiline 多行模块

    kibana

    • 1 kibana的安装:
      可以是一台独立服务器
    - cd /usr/local/src    下载源码包
    -  wget https://download.elastic.co/kibana/kibana/kibana-4.3.1-linux-x64.tar.gz  
    - tar zxf kibana-4.3.1-linux-x64.tar.gz   解压
    - mv kibana-4.3.1-linux-x64 /usr/local/
    -  ln -s /usr/local/kibana-4.3.1-linux-x64/ /usr/local/kibana    创建软连接方便查找
    
    • 2 修改配置文件:
    - cd    /usr/local/kibana/config
    - cp kibana.yml kibana.yml.bak
    --------------------
    -  vim kibana.yml 
    server.port: 5601
    server.host: "0.0.0.0"
    elasticsearch.url: "http://192.168.1.160:9200"
    kibana.index: ".kibana"
    --------------------
    

    运行
    因为他一直运行在前台,要么选择开一个shell窗口,要么选择使用screen。
    安装并使用screen启动kibana:

    - yum -y install screen
    - screen 
    - /usr/local/kibana/bin/kibana
        [root@tivf18 root]# screen -r 8736    可以回到这个进程
    
    • 3 访问kibana
      http://192.168.87.129:5601/
      1.添加索引名称


      image.png

    2.然后点击上面的Discover,在Discover中查看:


    image.png

    3.查看日志登陆,需要点击“Discover”-->"message",点击它后面的“add”


    image.png

    4.这样,右边显示的日志内容的属性就带了message和path


    image.png

    5.点击右边日志内容属性后面隐藏的<<,就可将内容向前缩进


    image.png
    image.png

    6.添加新的日志采集项,点击Settings->+Add New,比如添加system系统日志。注意后面的*不要忘了。
    7.删除kibana里的日志采集项,如下,点击删除图标即可。


    image.png

    相关文章

      网友评论

        本文标题:ELK虚拟机构建

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