一篇文章部署ELK+Filebeat 分布式日志解决方案,全网最简洁.

一.首先先了解下ELK+Filebeat

官网地址: https://www.elastic.co/cn/

Elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎

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

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

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

二.正式进入今天的部署

因为现在容器化的盛行所以我们也采用docker部署,但是因为只是演示这套分布式日志解决方案所以所有工具都暂时只是部署单机,我希望你对容器化的概念有一点了解哦.

因为ELK 是一套分布式治理的方案所以我们会使用到docker的服务编排docker-compose

  1. 安装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

出现版本号就证明下载完成

  1. 之后我们添加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"
  1. 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
  1. 查看容器是否启动成功

ip:9200 查看elasticsearch

ip:5601 使用kibana

到这里我们的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      

容器启动成功

  1. 测试elk+filebeat

#进入收集的日志目录
cd var/log/logapp
#创建测试文件
touch testelk.log
#编辑文件
vim testelk.log

testelk.log

我们去kibana 创建索引模式

创建 logapp-*

根据索引模式查询

 

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

到现在为止我们的elk+kibana 就部署完毕了,你想要收集哪一台服务器的日志就可以在哪一台机器上部署一台filebeat,之后指向logstash的ip:端口,就完成了一套分布式的日志收集,如果大伙按照这个步骤发现中间有问题,日志没有收集到,慢慢解决服务部署是一个过程,解决问题也是考研程序员水平的一方面,慢慢来哦,希望这篇文章能对你有帮助.

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值