zoukankan      html  css  js  c++  java
  • 单机部署 ELK

    对于一个体量不大的系统,运行在单机上的 ELK 就足以胜任日志的处理任务了。本文介绍如何在单台服务器上安装并配置 ELK(elalasticsearch + logstash + kibana),并最终通过 filebeat 把日志数据发送给日志服务器(ELK)。整体的架构如下图所示(此图来自互联网):

    本文的演示环境为 Ubuntu Server 18.04,ELK 和 filebeat 的版本都是 6.2.4。

    安装 java 运行时

    我们假设您已经有一台运行 Ubuntu Server 18.04 的主机了,所以安装步骤从 java 运行时开始。必须安装 java 运行时是因为 elasticsearch 和 logstash 都是 Java 程序。下面的命令安装 openjdk8:

    $ apt update
    $ apt install -y openjdk-8-jre-headless

    安装完成后检查一下安装结果:

    $ java -version

    安装 elasticsearch

    可以通过下面的命令安装 elasticsearch 6.2.4:

    $ wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
    $ sudo echo "deb https://artifacts.elastic.co/packages/6.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list
    $ sudo apt update
    $ sudo apt install -y elasticsearch=6.2.4
    $ sudo systemctl daemon-reload
    $ sudo systemctl enable elasticsearch.service

    安装 kibana

    可以通过下面的命令安装 kibana 6.2.4:

    $ wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
    $ sudo echo "deb https://artifacts.elastic.co/packages/6.x/apt stable main" | tee -a /etc/apt/sources.list.d/elastic-6.x.list
    $ sudo apt update
    $ sudo apt install -y kibana=6.2.4
    $ sudo systemctl daemon-reload
    $ sudo systemctl enable kibana.service

    安装 logstash

    笔者在通过上面的方式安装 logstash 6.2.4 的时候发生了错误,说是找不到 logstash 6.2.4:

    所以直接从官网下载了 6.2.4 的安装包通过下面的命令进行本地安装:

    $ sudo apt install ./logstash-6.2.4.deb
    
    $ sudo systemctl daemon-reload
    $ sudo systemctl enable logstash.service

    完整的安装脚本

    可以通过下面的脚本一次完成 elasticsearch、kibana 和 logstash 的安装:

    #!/bin/bash
    # sudo ./installelk6.2.4.u1804.sh
     
    apt update
    apt install -y openjdk-8-jre-headless
    wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | apt-key add -
    echo "deb https://artifacts.elastic.co/packages/6.x/apt stable main" | tee -a /etc/apt/sources.list.d/elastic-6.x.list
    
    apt update
    
    apt install -y elasticsearch=6.2.4
    apt install -y kibana=6.2.4
    apt install -y ./logstash-6.2.4.deb
     
    systemctl daemon-reload
    systemctl enable elasticsearch.service
    systemctl enable logstash.service
    systemctl enable kibana.service

    把上面的内容保存在 installelk6.2.4.u1804.sh 文件中,和下载的 logstash-6.2.4.deb 文件放在同一个目录下,并进入到该目录中,执行下面的命令进行安装:

    $ chomd +x installelk6.2.4.u1804.sh
    $ sudo ./installelk6.2.4.u1804.sh

    为 elasticsearch 挂载一个大磁盘

    elasticsearch 需要大容量的存储设备来保存日志数据,所以我们这里单独添加一块 1T 的磁盘来保存日志数据。
    先在系统的根目录下创建 esdata 目录作为磁盘的挂载点,elasticsearch 中的数据和自身的日志将会保存到这个目录中:

    $ sudo mkdir /esdata

    我们添加的磁盘的文件设备名称为 /dev/sdb,下面就把磁盘挂载到 /esdata 目录。
    先使用 fdisk 命令对磁盘进行分区:

    $ (echo n; echo p; echo 1; echo ; echo ; echo w) | sudo fdisk /dev/sdb

    然后使用 mkfs 命令将文件系统写入分区:

    $ sudo mkfs -t ext4 /dev/sdb1

    最后把新的磁盘分区挂载到 /esdata 装载新磁盘使其在操作系统中可访问:

    $ sudo mount /dev/sdb1 /esdata

    查看挂载完成后的文件系统:

    $ df -h 

    接下来设置 elasticsearch 用户作为该目录的所有者,这样就 elasticsearch 就能往目录下写文件了:

    $ sudo chown elasticsearch:elasticsearch /esdata
    $ sudo chmod 750 /esdata

    设置开机自动挂载

    现在挂载的文件系统 /esdata 会在系统重启后丢掉,因此需要设置在开机时自动挂载这个文件系统。先通过下面的命令找到设备的 UUID:

    $sudo -i blkid

    输出的内容为类似于下面的一些行,其中的 UUID 是我们需要的:

    /dev/sdb1: UUID="db048fa3-903b-4b85-a7ab-01c920283eeb" TYPE="ext4" PARTUUID="b0261bed-01"

    在 /etc/fstab 文件中添加类似于以下内容的行,其中的 UUID 就是从上面得来的:

    UUID=db048fa3-903b-4b85-a7ab-01c920283eeb /esdata  ext4    defaults,nofail,barrier=0   1  2

    这样的设置完成后,文件系统会在开机时自动挂载。

    修改 elasticsearch 数据和日志文件的存储位置
    在 /etc/elasticsearch/elasticsearch.yml 文件中找 path.data 和 path.logs 的设置,并修改如下:

    # ----------------------------------- Paths ------------------------------------
    # Path to directory where to store the data (separate multiple locations by comma):
    path.data: /esdata
    #
    # Path to log files:
    path.logs: /esdata

    配置 kibana

    kibana 服务默认监听的端口号修为 5601,但是默认只有在本机才能访问!
    要取消对访问者 IP 地址的限制,需要修改配置文件 /etc/kibana/kibana.yml 中的 server.host,把默认值 localhost 改为 0.0.0.0:

    #server.host: "localhost"
    server.host: "0.0.0.0"

    配置 logstash

    logstash 的配置文件为 /etc/logstash/logstash.yml 默认不需要修改。在 /etc/logstash/conf.d 目录下添加配置文件 beat2es.conf,内容如下:

    input{
        beats{
            port => 5044
        }
    }
    output {
        elasticsearch {
            hosts => ["localhost:9200"]
            index => "beat-test-%{+YYYY.MM.dd}"
            sniffing => true
            template_overwrite => true
        }
    }

    该配置会让 logstash 服务监听 5044 端口接收数据:

    *:5044

    到此为止,我们已经完成了 elasticsearch、kibana 和 logstash 的安装和配置,下面启动这些服务:

    $ sudo systemctl start elasticsearch.service
    $ sudo systemctl start kibana.service
    $ sudo systemctl start logstash.service

    安装 filebeat

    假设我们也在 Ubuntu Server 18.04 的环境中安装 filebeat 6.2.4。先从官网下载 filebeat 6.2.4 deb 包,或者直接运行下面的命令进行安装:

    $ curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.2.4-amd64.deb
    $ sudo dpkg -i ./filebeat-6.2.4-amd64.deb
    $ sudo systemctl daemon-reload
    $ sudo systemctl enable filebeat.service

    验证安装:

    $ filebeat version
    filebeat version 6.2.4 (amd64), libbeat 6.2.4

    配置 filebeat

    配置 filebeat 从文件收集日志
    编辑配置文件 /etc/filebeat/filebeat.yml,在 filebeat.prospectors 段修改 type 为 log 中的内容:

    - type: log
      # Change to true to enable this prospector configuration.
      enabled: true
      # Paths that should be crawled and fetched. Glob based paths.
      paths:
        - /home/nick/work/test.log

    把日志发送给 logstash
    编辑配置文件 /etc/filebeat/filebeat.yml,在 output.logstash 段修改配置 中的内容:

    output.logstash:
      # The Logstash hosts
      hosts: ["your log server ip:5044"]

    多行事件编码(合并多行到一条记录)
    在 filebeat.prospectors 配置块中添加下面的配置:

    ### Multiline options
    multiline.pattern: '^['
    multiline.negate: true
    multiline.match: after

    注释掉 output.elasticsearch
    同时要把 output.elasticsearch 的配置注释掉。

    #output.elasticsearch:
      # Array of hosts to connect to.
      #hosts: ["localhost:9200"]

    最后启动 filebeat 服务:

    $ sudo systemctl start filebeat.service

    测试一下

    通过 echo 向 /home/nick/work/test.log 文件中追加 '[' 开头的行模拟日志记录:

    echo "[exception:]" >> work/test.log
    echo "  at xxx" >> work/test.log
    echo "  at xxx" >> work/test.log
    echo "[OK]" >> work/test.log 

    "  at" 开头的行用来模拟程序中的异常堆栈。

    在浏览器中打开 kibana,添加 beat-test* 模式的索引就可以看到日志记录了:

    由于我们在 filebeat 的配置中设置了 multiline 处理,所以类似 "  at" 开头的行会被认为是异常堆栈从而合并到一条记录中:

    这样的设置在故障调查时会让异常堆栈看起来更友好些!

    总结

    ELK 本身是个体量比较大的日志系统(当然也可以用来干其它的事情),安装和配置都会有些坑。本文只是介绍如何部署一个袖珍的 demo 环境,方便大家开始了解和学习 ELK。

  • 相关阅读:
    内置函数zip,map,even
    异常处理
    requests模块(请求接口)
    网络编程之urllib
    cookie/session区别
    测试环境搭建流程
    接口开发01--mock接口
    操作Redis--hash/key-value
    操作excel--xlwt/xlrd/xlutils模块
    可变对象 不可变对象 浅拷贝 深拷贝
  • 原文地址:https://www.cnblogs.com/sparkdev/p/10554076.html
Copyright © 2011-2022 走看看