架构简介

  • Elasticsearch
    一个近乎实时查询的全文搜索引擎。Elasticsearch 的设计目标就是要能够处理和搜索巨量的日志数据。
  • Logstash
    读取原始日志,并对其进行分析和过滤,然后将其转发给其他组件(比如 Elasticsearch)进行索引或存储。Logstash 支持丰富的 Input 和 Output 类型,能够处理各种应用的日志。
  • Kibana
    一个基于 JavaScript 的 Web 图形界面程序,专门用于可视化 Elasticsearch 的数据。Kibana 能够查询 Elasticsearch 并通过丰富的图表展示结果。用户可以创建 Dashboard 来监控系统的日志。
  • Filebeat
    引入Filebeat作为日志搜集器,主要是为了解决Logstash开销大的问题。相比Logstash,Filebeat 所占系统的 CPU 和内存几乎可以忽略不计。

架构图例

Docker单节点ELK Filebeat - 图1

安装ELK

在大的生产环境中,可以分布式安装ELK并高可用和负载均衡,但是在此,仅仅为了学习使用,所以就采用容器化的方式安装ELK套件

1. 首先安装docker

  1. # 安装必须的包
  2. yum install -y yum-utils \
  3. device-mapper-persistent-data \
  4. lvm2
  5. # 添加docker源
  6. yum-config-manager \
  7. --add-repo \
  8. https://download.docker.com/linux/centos/docker-ce.repo
  9. # 安装docker
  10. yum install -y docker-ce docker-ce-cli containerd.io

2. 添加docker的国内源

由于国内的网络环境等原因,docker在国内的使用体验并不好,尤其是拉去镜像,所以建议配置国内的镜像加速,这里使用的是网易的镜像。也可以去自行申请daocloud和阿里云加速

  1. mkdir -p /etc/docker
  2. cat > /etc/docker/daemon.json <<EOF
  3. >{
  4. > "registry-mirrors": ["http://hub-mirror.c.163.com"]
  5. >}
  6. EOF

Docker Hub 镜像加速器列表

镜像加速器 镜像加速器地址 专属加速器 其它加速
Docker 中国官方镜像 https://registry.docker-cn.com Docker Hub
DaoCloud 镜像站 http://f1361db2.m.daocloud.io 可登录,系统分配 Docker Hub
Azure 中国镜像 https://dockerhub.azk8s.cn Docker Hub、GCR、Quay
科大镜像站 https://docker.mirrors.ustc.edu.cn Docker Hub、GCRQuay
阿里云 https://.mirror.aliyuncs.com 需登录,系统分配 Docker Hub
七牛云 https://reg-mirror.qiniu.com Docker Hub、GCR、Quay
网易云 https://hub-mirror.c.163.com Docker Hub
腾讯云 https://mirror.ccs.tencentyun.com Docker Hub

3. 拉取镜像

使用已经封装好的elk镜像

docker pull sebp/elk

4. 设置运行环境

由于ELK镜像有最小内存需求,所以在虚拟机中安装时需要注意修改/etc/sysctl.conf文件

切换到root用户修改配置sysctl.conf
vi /etc/sysctl.conf
在尾行添加以下内容   
vm.max_map_count=262144
并执行命令
sysctl -p

5. 运行镜像

docker run -p 5601:5601 -p 9200:9200 -p 5044:5044 -it --name elk sebp/elk

6. 修改logstash配置文件

因为在构架的设计中使用filebeat来收集日志文件,所以需要设置logstash的beat-input文件

由于不使用证书认证,所以将配置文件中的三个ssl认证相关的内容删除,否则报错!

如果需要使用认证,将logstash.crt拷贝到Filebeat安装的客户端中,在filebeat.yml中添加路径即可

# 进入容器
docker exec -it elk /bin/bash
# 修改02-beat-input.conf
cd /etc/logstash/conf.d/
vi 02-beat-input.conf

# 最终结果如下
input {
  beat{
    port => 5044
  }
}

7. 重启容器

docker restart elk

安装Filebeat(版本与其他组件保持一致)

安装filebeat的方法有多种,这里选用比较简单的rpm包安装的方法

官网提供了rpm包下载地址以及其他安装方法的教程

mkdir -p  /opt/filebeat
cd /opt/filebeat
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.4.2-x86_64.rpm
rpm -ivh filebeat-7.4.2-x86_64.rpm

修改filebeat配置文件

# 修改filebeat配置
cd /etc/filebeat/filebeat.yml

# 将filebeat input部分改为
#=========================== Filebeat inputs =============================

filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /opt/datas/logs/*/*.log
  tags: ["测试环境"]
  multiline:
    pattern: '^\s*(\d{4}|\d{2})\-(\d{2}|[a-zA-Z]{3})\-(\d{2}|\d{4})'
    # pattern: '^\s*("{)'
    negate: true
    match: after
    max_lines: 1000
    timeout: 30s

# 将Elasticsearch output注释
# 再将logstash output注释打开
output.logstash:
  # The Logstash hosts
  # localhost是本机IP,如果ELK在远程机器,需要输入ELK所在机器IP。并设置防火墙放行5044端口
  hosts: ["localhost:5044"]

# filebeat中还提供了一些监控常用服务日志的模板,需要将module模块打开
#============================= Filebeat modules ===============================

filebeat.config.modules:
  # Glob pattern for configuration loading
  path: ${path.config}/modules.d/*.yml

  # Set to true to enable config reloading
  reload.enabled: false

# 然后进入modules.d目录下,将需要监控的服务对应的文件复制
cp nginx.yml.disabled nginx.yml

启动Filebeat

# 启动
systemctl start filebeat
# 关闭
systemctl stop filebeat
# 重启
systemctl restart filebeat
# 查看状态
# 如果ELK机器也开启了Filebeat服务,可能导致远程机器无法连接,所以事先关闭ELK机器Filebeat
systemctl status filebeat
# 查看filebeat日志
tail -f /var/log/filebeat/filebeat

进入Kibana

浏览器输入ELK机器IP:5601,刚启动elk容器可能会比较慢,耐心等待,如果出现无法从浏览器连接,可以测试是否开启

curl IP:5601 -I

如果返回头没有报错,则已经开启,机器浏览器打不开可能是机器内存不足(主机或虚拟机都可能)

Docker单节点ELK Filebeat - 图2

按照指引设置

Docker单节点ELK Filebeat - 图3

设置完成后再点击Discover就能看到数据