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

安装ELK
在大的生产环境中,可以分布式安装ELK并高可用和负载均衡,但是在此,仅仅为了学习使用,所以就采用容器化的方式安装ELK套件
1. 首先安装docker
# 安装必须的包yum install -y yum-utils \device-mapper-persistent-data \lvm2# 添加docker源yum-config-manager \--add-repo \https://download.docker.com/linux/centos/docker-ce.repo# 安装dockeryum install -y docker-ce docker-ce-cli containerd.io
2. 添加docker的国内源
由于国内的网络环境等原因,docker在国内的使用体验并不好,尤其是拉去镜像,所以建议配置国内的镜像加速,这里使用的是网易的镜像。也可以去自行申请daocloud和阿里云加速
mkdir -p /etc/dockercat > /etc/docker/daemon.json <<EOF>{> "registry-mirrors": ["http://hub-mirror.c.163.com"]>}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、GCR、Quay | |
| 阿里云 | 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包安装的方法
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
如果返回头没有报错,则已经开启,机器浏览器打不开可能是机器内存不足(主机或虚拟机都可能)

按照指引设置

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