Filebeat收集nginx容器日志并同步到Elastic Cloud
https://www.elastic.co/guide/en/beats/filebeat/
Filebeat是一个用于转发和集中日志数据的轻量级传送程序。作为代理安装在服务器上,Filebeat监视指定的日志文件或位置,收集日志事件,并将它们转发到Elasticsearch或Logstash进行索引。
Filebeat的工作原理
注意:由于官方docker.elastic.co的国内访问速度很慢,所以我们直接用已经有加速的dockerhub仓库地址。
拉取Filebeat镜像文件(dockerhub官方镜像版本,我们在第一章里用了阿里云镜像对其进行加速)
docker pull store/elastic/filebeat:7.6.2
下载官方的配置文件:
1
curl -L -O https://raw.githubusercontent.com/elastic/beats/7.6/deploy/docker/filebeat.docker.yml
Copied!
filebeat.docker.yml文件内容:
1
filebeat.config:
2
modules:
3
path: ${path.config}/modules.d/*.yml
4
reload.enabled: false
5
6
filebeat.autodiscover:
7
providers:
8
- type: docker
9
hints.enabled: true
10
11
processors:
12
- add_cloud_metadata: ~
13
14
output.elasticsearch:
15
hosts: '${ELASTICSEARCH_HOSTS:elasticsearch:9200}'
16
username: '${ELASTICSEARCH_USERNAME:}'
17
password: '${ELASTICSEARCH_PASSWORD:}'
Copied!
filebeat.docker.yml文件配置默认为基于应用于容器的docker label来部署Beats模块,filebeat就能使用自动发现功能,所以我们启动nginx容器时需要加上label:
1
docker run \
2
--label co.elastic.logs/enable=true \
3
--label co.elastic.logs/module=nginx \
4
--label co.elastic.logs/fileset.stdout=access \
5
--label co.elastic.logs/fileset.stderr=error \
6
--name nginx-app \
7
-p 80:80 -d \
8
nginx:alpine
Copied!
启动filebeat容器:
1
docker run -d \
2
--name=filebeat \
3
--user=root \
4
--volume="$(pwd)/filebeat.docker.yml:/usr/share/filebeat/filebeat.yml:ro" \
5
--volume="/var/lib/docker/containers:/var/lib/docker/containers:ro" \
6
--volume="/var/run/docker.sock:/var/run/docker.sock:ro" \
7
store/elastic/filebeat:7.6.2 filebeat -e -strict.perms=false \
8
-E cloud.id=<Cloud ID from Elasticsearch Service> \
9
-E cloud.auth=elastic:<elastic password>
Copied!
这里由于我们还没有本地配置ElasticSearch,所以把参数-E output.elasticsearch.hosts=["elasticsearch:9200"]改掉,暂时使用Elastic Cloud提供的Elasticsearch Service的代替,上面的用户名和密码请以你自己的Elastic Cloud代替。例如:
1
docker run -d \
2
--name=filebeat \
3
--user=root \
4
--volume="$(pwd)/filebeat.docker.yml:/usr/share/filebeat/filebeat.yml:ro" \
5
--volume="/var/lib/docker/containers:/var/lib/docker/containers:ro" \
6
--volume="/var/run/docker.sock:/var/run/docker.sock:ro" \
7
store/elastic/filebeat:7.6.2 filebeat -e -strict.perms=false \
8
-E cloud.id=nginx-simon1:c291dGhlYXN0YXNpYS5henVyZS5lbGFzdGljLWNsb3VkLmNvbTo5MjQzJDgzMjZkYTcyMDRkNDQzODA4YzkyYjMzOTEwNzc0MjIzJGZlYzAyYzQ3NDI0NDQ4YjM5MWRlNGI5MjI5NTY2MThk \
9
-E cloud.auth=elastic:HT0QWmB7yvJK4xjLgIs59Ruo
Copied!
确保nginx和filebeat两个容器都启动后,我们刷一下本地80端口访问量,然后打开Elastic Cloud上的Kibana-->Logs,能获取到nginx访问日志即代表配置正确:

补充:Elastic Cloud设置和获取Cloud ID/password的方法

Elastic Cloud是收费的SAAS服务,https://www.elastic.co/英文官方网站上提供免费的14天测试。
1)激活账号后登录https://cloud.elastic.co/home
2)点击“Start your free trail”
3)填写“Create deployment”表单里的内容,例如:Select a cloud platform选择Azure,Select a region选择Southeast Asia (Singapore),其他保持默认。
4)点击Deploy后云端会自动开始准备环境,页面上会提示Save your Elasticsearch and Kibana password。大约三分钟后可以使用。
5)点击左上角Deployment的名字,在页面上获取对应的cloud ID
Last modified 1yr ago