我是 Graylog 的新手,我正在尝试在 Docker 容器上使用 Graylog,但其他容器的日志没有到达 Graylog,并且 Graylog Web 界面搜索上没有显示任何内容。
我应该如何处理到达 Graylog 的集装箱日志?
下面我描述一下我的尝试:
在单个主机上,仅使用一个节点(它自己)运行 docker swarm。
该主机的本地IP是:10.0.0.5
在文件夹中,我有一些文件:
- docker-compose.yml
- graylog.js
我的内容docker-compose.yml
是:
version: "3.3"
networks:
ambiente:
external: true
services:
# MONGO
mongo:
image: mongo:4.2
networks:
- ambiente
environment:
- MONGO_INITDB_ROOT_USERNAME=root
- MONGO_INITDB_ROOT_PASSWORD=drUqGGCMh
volumes:
- ./graylog.js:/docker-entrypoint-initdb.d/graylog.js:ro
# ELASTICSEARCH
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch-oss:7.10.2
environment:
- "http.host=0.0.0.0"
- "discovery.type=single-node"
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
networks:
- ambiente
# GRAYLOG
graylog:
image: graylog/graylog:4.1.0
environment:
- GRAYLOG_HTTP_EXTERNAL_URI=http://10.0.0.5:9000/
# Pass is "admin"
- GRAYLOG_ROOT_PASSWORD_SHA2=8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918
- GRAYLOG_ELASTICSEARCH_DISCOVERY_ENABLED=true
- GRAYLOG_MONGODB_URI=mongodb://graylog:vWGzncmBe9@mongo:27017/graylog
- GRAYLOG_MESSAGE_JOURNAL_ENABLED=false
depends_on:
- mongo
- elasticsearch
ports:
- "9000:9000"
- "12201:12201"
- "1514:1514"
networks:
- ambiente
内容graylog.js
是:
graylog = db.getSiblingDB('graylog');
graylog.createUser(
{
user: "graylog",
pwd: "vWGzncmBe9",
roles: [
{ role: "dbOwner", db: "graylog" }
]
}
);
在主机上,我创建了/etc/docker/daemon.json
内容如下的文件:
{
"metrics-addr" : "10.0.0.5:9323",
"experimental" : true,
"log-driver": "gelf",
"log-opts": {
"gelf-address": "udp://10.0.0.5:12201"
}
}
创建文件后,我重新启动了docker服务并检查了以下状态:
service docker restart
service docker status
docker 服务状态为ACTIVE:
Active: active (running) since Sat 2021-06-26 16:58:31 -03; 1min 2s ago
然后我创建了一个 Docker 网络:
docker network create -d overlay ambiente
然后我解除了堆栈:
docker stack deploy graylog -c docker-compose.yml
在 Graylog 运行时,从系统/输入上的 Web 界面,我创建了一个全局输入,如下所示:
bind_address:0.0.0.0
decompress_size_limit:8388608
number_worker_threads:12
override_source:端口:12201
recv_buffer_size:262144
谢谢你的帮助!
答案1
我在 Google 上搜索了很久之后才找到答案!
在这里发布这个答案来帮助任何遇到与我同样困难的人。
问题出在docker-compose.yml
graylog 端口上的文件上,因为我使用了 UDP 协议:
之前(不起作用),因为默认的docker端口是TCP协议:
ports:
- "9000:9000"
- "12201:12201"
- "1514:1514"
现在(工作),docker 端口采用 TCP 和 UDP 协议:
ports:
- "9000:9000"
- "12201:12201"
- "12201:12201/udp"
- "1514:1514"
- "1514:1514/udp"
从任何容器进行测试:
echo -n '{ "version": "1.1", "host": "example.org", "short_message": "A short message again", "level": 5, "_some_info": "foo" }' | nc -w1 -u 10.0.0.5 12201
并且消息出现在Graylog Web界面上:
2021-06-27 18:27:48.185 +00:00 example.org 一条简短的消息!