
一.首先先了解下ELK+Filebeat
官网地址: https://www.elastic.co/cn/
Elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎

Logstash 是免费且开放的服务器端数据处理管道

Kibana 是一个免费且开放的用户界面,能够让您对 Elasticsearch 数据进行可视化

FileBeat,它是一个轻量级的日志收集处理工具 (Agent),Filebeat占用资源少,适合于在各个服务器上搜集日志后传输给Logstash

二.正式进入今天的部署
因为现在容器化的盛行所以我们也采用docker部署,但是因为只是演示这套分布式日志解决方案所以所有工具都暂时只是部署单机,我希望你对容器化的概念有一点了解哦.
因为ELK 是一套分布式治理的方案所以我们会使用到docker的服务编排docker-compose
-
安装docker-compose
# 从github下载(如果下载的慢的话可以用下面的)
sudo curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
# 从daocloud 下载(这边我们采用这种下载方式)
sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
# 下载完毕后添加可执行权限
sudo chmod +x /usr/local/bin/docker-compose
# 查看是否安装完毕
docker-compose -version
-
之后我们添加ELK 需要挂载到宿主机的文件
-
logstash
# 创建文件夹
mkdir /home/docker/elk/logstash
# 进入目录
cd /home/docker/elk/logstash
# 创建文件
touch logstash.conf
# 编辑文件
vim logstash.conf
logstash.conf
input {
beats {
#logstash 开发接受日志的端口
port => 4567
}
}
filter {
#Only matched data are send to output.
}
output {
elasticsearch {
#elasticsearch 的机器地址
hosts => ["http://elasticsearch机器ip:9200"] #ElasticSearch host, can be array.
#elasticsearch 索引
index => "logapp-%{+YYYY.MM}" #The index to write data to.
}
}
-
kinbana
mkdir /home/docker/elk/kibana
# 进入目录
cd /home/docker/elk/kibana
# 创建文件
touch kibana.yml
# 编辑文件
vim kibana.yml
kibana.yml
#
# ** THIS IS AN AUTO-GENERATED FILE **
#
# Default Kibana configuration for docker target
server.name: kibana
server.host: "0"
# elasticsearch机器ip机器地址
elasticsearch.hosts: [ "http://elasticsearch机器ip:9200" ]
monitoring.ui.container.elasticsearch.enabled: true
# 中文插件
i18n.locale: "zh-CN"
-
docker-compose
#进入我们宿主机docker目录
cd //./home/docker/
#创建docker-compose 文件
touch docker-compose-elk.yml
# 编辑文件
vim docker-compose-elk.yml
docker-compose-elk.yml
version: '3.7'
services:
elasticsearch:
image: elasticsearch:7.9.0
container_name: elasticsearch
privileged: true
user: root
environment:
#设置集群名称为elasticsearch
- cluster.name=elasticsearch
#以单一节点模式启动
- discovery.type=single-node
#设置使用jvm内存大小
- ES_JAVA_OPTS=-Xms512m -Xmx512m
volumes:
- /home/docker/elk/elasticsearch/plugins:/usr/share/elasticsearch/plugins
- /home/docker/elk/elasticsearch/data:/usr/share/elasticsearch/data
ports:
- 9200:9200
- 9300:9300
logstash:
image: logstash:7.9.0
container_name: logstash
ports:
- 4567:4567
- 5044:5044
- 5045:5045
privileged: true
environment:
- TZ=Asia/Shanghai
volumes:
#挂载logstash的配置文件
- /home/docker/elk/logstash/logstash.conf:/usr/share/logstash/pipeline/logstash.conf
depends_on:
- elasticsearch
links:
#可以用es这个域名访问elasticsearch服务
- elasticsearch:es
kibana:
image: kibana:7.9.0
container_name: kibana
ports:
- 5601:5601
privileged: true
links:
#可以用es这个域名访问elasticsearch服务
- elasticsearch:es
depends_on:
- elasticsearch
environment:
#设置访问elasticsearch的地址
- elasticsearch.hosts=http://elasticsearch机器ip:9200
volumes:
- /home/docker/elk/kibana:/config
# 启动docker
docker-compose -f docker-compose-elk.yml up -d
# 查看容器运行状态
docker ps
!!! 我们发现elasticsearch 启动失败了 OMG 哈哈不要慌其实是elasticsearch的data目录没有默认权限

# 给宿主机的data目录读写权限
chmod 777 /home/docker/elk/elasticsearch/data
# 关闭docker容器
docker-compose -f docker-compose-elk.yml down
# 重启docker容器
docker-compose -f docker-compose-elk.yml up -d
-
查看容器是否启动成功
到这里我们的ELK就部署上去了,但是如何使用我们还不知道 其实现在就可以使用logstash收集日志了,但是logstash 不管是对于内存的消耗还是对于cpu的占用都是很大的,所以我们采用一个比较轻量级的日志收集 filebeat
-
部署filebeat
老规矩去你想收集日志的服务器新建filebeat需要挂载到宿主机的文件 filebeat.yml
# 创建文件夹
mkdir /home/docker/elk/filebeat
# 进入目录
cd /home/docker/elk/filebeat
# 编辑文件
vim filebeat.yml
filebeat.yml
filebeat.inputs:
- type: log
paths:
#收集的日志文件目录
- /var/log/logapp/*.log
output.logstash:
# 注意只是IP 不加协议没有HTTP!!!
hosts: ["logstash的ip:4567"]
setup.kibana:
# 注意只是IP 不加协议没有HTTP!!!
host: "kibana的ip端口"
#启动容器
docker run -u root -v /var/log/logapp:/var/log/logapp:rw -v /home/docker/elk/filebeat/filebeat.yml:/usr/share/filebeat/filebeat.yml:ro -d --name filebeat elastic/filebeat:7.9.0
-
测试elk+filebeat
#进入收集的日志目录
cd var/log/logapp
#创建测试文件
touch testelk.log
#编辑文件
vim testelk.log
testelk.log

我们去kibana 创建索引模式


创建 logapp-*

根据索引模式查询

发现我们之前写进去的testelk 已经被收集了

到现在为止我们的elk+kibana 就部署完毕了,你想要收集哪一台服务器的日志就可以在哪一台机器上部署一台filebeat,之后指向logstash的ip:端口,就完成了一套分布式的日志收集,如果大伙按照这个步骤发现中间有问题,日志没有收集到,慢慢解决服务部署是一个过程,解决问题也是考研程序员水平的一方面,慢慢来哦,希望这篇文章能对你有帮助.
原文始发于微信公众号(闯sir9):一篇文章部署ELK+Filebeat 分布式日志解决方案,全网最简洁.
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/20603.html