当前位置:   article > 正文

单机部署ELK

单机部署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:

  1. $ apt update
  2. $ apt install -y openjdk-8-jre-headless
安装完成后检查一下安装结果:

安装 Elasticsearch

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

  1. $ wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
  2. $ 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
  3. $ sudo apt update
  4. $ sudo apt install -y elasticsearch=6.2.4
  5. $ sudo systemctl daemon-reload
  6. $ sudo systemctl enable elasticsearch.service

安装 kibana

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

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

安装 logstash

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


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

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

完整的安装脚本

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

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

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

  1. $ chomd +x installelk6.2.4.u1804.sh
  2. $ 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 就能往目录下写文件了:

  1. $ sudo chown elasticsearch:elasticsearch /esdata
  2. $ 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 的设置,并修改如下:​​​​​​​

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

kibana 服务默认监听的端口号修为 5601,但是默认只有在本机才能访问!

要取消对访问者 IP 地址的限制,需要修改配置文件 /etc/kibana/kibana.yml 中的 server.host,把默认值 localhost 改为 0.0.0.0:

配置 kibana​​​​​​​

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

配置 logstash

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

  1. input{
  2. beats{
  3. port => 5044
  4. }
  5. }
  6. output {
  7. elasticsearch {
  8. hosts => ["localhost:9200"]
  9. index => "beat-test-%{+YYYY.MM.dd}"
  10. sniffing => true
  11. template_overwrite => true
  12. }
  13. }

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

*:5044

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

  1. $ sudo systemctl start elasticsearch.service
  2. $ sudo systemctl start kibana.service
  3. $ sudo systemctl start logstash.service
安装 filebeat

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

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

验证安装:​​​​​​​

  1. $ filebeat version
  2. filebeat version 6.2.4 (amd64), libbeat 6.2.4

配置 filebeat

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

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

把日志发送给 logstash

编辑配置文件 /etc/filebeat/filebeat.yml,在 output.logstash 段修改配置 中的内容:​​​​​​​

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

多行事件编码(合并多行到一条记录)

在 filebeat.prospectors 配置块中添加下面的配置:​​​​​​​

  1. ### Multiline options
  2. multiline.pattern: '^\['
  3. multiline.negate: true
  4. multiline.match: after

注释掉 output.elasticsearch

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

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

最后启动 filebeat 服务:

$ sudo systemctl start filebeat.service

测试一下

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

  1. echo "[exception:]" >> work/test.log
  2. echo " at xxx" >> work/test.log
  3. echo " at xxx" >> work/test.log
  4. echo "[OK]" >> work/test.log

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

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

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/爱喝兽奶帝天荒/article/detail/992941
推荐阅读
相关标签
  

闽ICP备14008679号