Filebeat+Fluentd和Compose
ELK+Filebeat
关于docker elk安装可以翻阅上一个博客
filebeat 是基于原先 logstash-forwarder 的源码改造出来的。换句话说:filebeat 就是新版的 logstash-forwarder,也会是 ELK Stack 在 shipper 端的第一选择。
Filebeat的架构设计
当我们安装完filebeat之后,我们可以在filebeat的安装目录下看到两个文件
-
filebeat.template.json (输出的文件格式,在filebeat的template中指定,当服务启动时,会被加载)
-
filebeat.yml(所有的配置都在该文件下进行)
filebeat是用来收集日志的,那么在filebeat.yml中会配置指定的监听文件,也就是上图中的一个个log,这个log的目录是在prospectors中设置,在看配置文件的时候便可以很明白的看出来,对于prospectors定位每个日志文件,Filebeat启动harvester。每个harvester读取新的内容一个日志文件,新的日志数据发送到spooler(后台处理程序),它汇集的事件和聚合数据发送到你已经配置了Filebeat输出。
filebeat安装
环境:docker elk 7.7.0版本
filebeat 7.7.0 版本
关闭防火墙或开启相应端口
注:elk与filebeat版本要保持一致否则容易初始化失败
下载网址:https://www.elastic.co/cn/downloads/past-releases/filebeat-7-7-0
提供一个我自己的github网址可以直接下载rpm包:https://github.com/mrlxxx/filebeat.git
docker ps
0065c4b64b67 sebp/elk:770 "/usr/local/bin/star…" 4 hours ago Up 39 minutes 0.0.0.0:5044->5044/tcp, 0.0.0.0:5601->5601/tcp, 0.0.0.0:9200->9200/tcp, 9300/tcp elk
##elk运行保证端口全部开启
##下载安装filebeat
git clone https://github.com/mrlxxx/filebeat.git
cd filebeat
rpm -ivh filebeat-7.7.0-x86_64.rpm
##修改配置文件 大概行数已经标出来,yml类型文件注意格式一致
vim /etc/filebeat/filebeat.yml
23 # Change to true to enable this input configuration.
24 enabled: true
25
26 # Paths that should be crawled and fetched. Glob based paths.
27 paths:
28 - /var/lib/docker/containers/*/*.log
29 - /var/log/messages
115 #============================== Kibana =====================================
116
117 # Starting with Beats version 6.0.0, the dashboards are loaded via the Kibana API.
118 # This requires a Kibana endpoint configuration.
119 setup.kibana:
120
121 # Kibana Host
122 # Scheme and port can be left out and will be set to the default (http and 5601)
123 # In case you specify and additional path, the scheme is required: http://localhost:5601/path
124 # IPv6 addresses should always be defined as: https://[2001:db8::1]:5601
125 host: "192.168.1.10:5601"
149 #-------------------------- Elasticsearch output ------------------------------
150 output.elasticsearch:
151 # Array of hosts to connect to.
152 hosts: ["192.168.1.10:9200"]
##启用并配置elasticsearch模块
filebeat modules enable elasticsearch
##初始化filebeat
filebeat setup
##启动服务
systemctl start filebeat
systemctl enable filebeat
运行一个容器在网页中查看相关日志信息
docker run -d busybox sh -c 'while true ; do echo "this test1 from busy";sleep 10;done;'
##访问ip:5601
也可以按照网页上的步骤安装filebeat
直接拉到最下方
结果如图
Fluentd
Fluentd是一个开源的数据收集器,专为处理数据流设计,使用JSON作为数据格式。它采用了插件式的架构,具有高可扩展性高可用性,同时还实现了高可靠的信息转发。具备每天收集5000+台服务器上5T的日志数据,每秒处理50000条消息的性能;
Fluentd是由Fluent+d得来,d生动形象地标明了它是以一个守护进程的方式运行。官网上将其描述为data collector,在使用上,我们可以把各种不同来源的信息,首先发送给Fluentd,接着Fluentd根据配置通过不同的插件把信息转发到不同的 地方,比如文件、SaaS Platform、数据库,甚至可以转发到另一个Fluentd
ELK+filebeat+fluentd
使用filebeat将fluentd收集到的日志转发给ELK
##下载
docker pull fluent/fluentd
##创建目录
mkdir /data
##运行
docker run -d -p 24224:24224 -p 24224:24224/udp -v /data:/fluentd/log fluent/fluentd
##修改filebeat.yml配置文件
26 # Paths that should be crawled and fetched. Glob based paths.
27 paths:
28 #- /var/lib/docker/containers/*/*.log
29 #- /var/log/messages
30 - /data/*.log
31 #- c:\programdata\elasticsearch\logs\*
##重启filebeat
systemctl restart filebeat
##运行容器验证
docker run -d --log-driver=fluentd busybox sh -c 'while true; do echo "this is fluentd log-A";sleep 10; done;'
docker run -d --log-driver=fluentd busybox sh -c 'while true; do echo "this is fluentd log-B";sleep 10; done;'
## --log-driver=fluentd
指定容器的日志驱动为fluend
##网页查看
compose的简单使用
docker镜像在创建之后,往往需要自己手动pull来获取镜像,然后执行run命令来运行。当服务需要用到多种容器,容器之间又产生了各种依赖和连接的时候,部署一个服务的手动操作是令人感到十分厌烦的。
docker-compose技术,就是通过一个 .yml 配置文件,将所有的容器的部署方法、文件映射、容器连接等等一系列的配置写在一个配置文件里,最后只需要执行docker-compose up命令就会像执行脚本一样的去一个个安装容器并自动部署他们,极大的便利了复杂服务的部署
官网地址:https://docs.docker.com/compose/install/
安装部署
##下载
curl -L "https://github.com/docker/compose/releases/download/1.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
##权限
chmod +x /usr/local/bin/docker-compose
##链接
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
常用命令
docker-compose --help
#用来创建或重新创建服务使用的镜像
docker-compose build
例如:docker-compose build service_a #创建一个镜像名叫service_a
#用于通过容器发送SIGKILL信号强行停止服务
docker-compose kill
#显示service的日志信息
docker-compose logs
#暂停和恢复服务
docker-compose pause/unpause
docker-compose pause #暂停服务
docker-compose unpause #恢复被暂停的服务
#用于查看服务中的端口与物理机的映射关系
docker-compose port
例如:docker-compose port nginx_web 80 #查看服务中80端口映射到物理机上的那个端口
#用于显示当前项目下的容器
dokcer-compose ps
注意,此命令与docker ps不同作用,此命令会显示停止后的容器(状态为Exited),只针对某个项目。
#用于拉取服务依赖的镜像
docker-compose pull
#用于重启某个服务中的所有容器
docker-compose restart
例如:docker-compose restart service_name #只有正在运行的服务可以使用重启命令,停止的服务是不可以重启
#删除停止的服务(服务里的容器)
docker-compose rm
-f #强制删除
-v #删除与容器相关的卷(volumes)
#用于在服务中运行一个一次性的命令
docker-compose run
这个命令会新建一个容器,它的配置和srvice的配置相同。但两者之间还是有两点不同之处
1、run指定的命令会直接覆盖掉service配置中指定的命令
2、run命令启动的容器不会创建在service配置中指定的端口,如果需要指定使用--service-ports指定
#启动/停止运行某个服务的所有容器
docker-compose start/stop
docker-compose start 启动运行某个服务的所有容器
docker-compose stop 停止运行某个服务的所有容器
#指定某个服务启动的容器个数
docker-compose scale
docker-compose scale --help
备注:
docker-compose 运行时是需要指定service名称,可以同时指定多个,也可以不指定。不指定时默认就是对配置文件中所有的service执行命令。
-f #用于指定配置文件
-p #用于指定项目名称
docker-compose配置文件实例
mkdir composetest
mkdir composetest/webserver
mkdir composetest/nginx
vim composetest/docker-compose.yml
version: "3" #指定语法的版本
services: #定义服务
nginx: #服务的名称
container_name: web-nginx #容器的名称
image: nginx #镜像
restart: always
ports: #端口,可以指定多个
- 80:80
volumes: #挂载目录
- ./webserver:/webserver
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf
目录结构
cd composetest/
tree
.
├── docker-compose.yml
├── nginx
│ ├── default.conf ##nginx的配置文件,没有的话可以先运行一个nginx容器复制出来
│ └── default.conf\
└── webserver
└── index.html
index.html
cat webserver/index.html
this is composetest test html from nginx
default.conf
cat nginx/default.conf
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
root /webserver;
index index.html index.htm;
}
运行
docker-compose up -d
docker-compose ps
Name Command State Ports
-------------------------------------------------------------
web-nginx nginx -g daemon off; Up 0.0.0.0:80->80/tcp
访问验证