使用Docker安装Graylog
翻译自官方文档,原文链接
需要的组件
你需要一个较新的docker版本,安装地址
在这个章节,我们将使用以下docker镜像
- Graylog: graylog/graylog
- MongoDB: mongo
- Elasticsearch: docker.elastic.co/elasticsearch/elasticsearch
快速开始
如果您只想在运行Graylog,且不需要高级配置,则可以运行以下三个命令来创建必要的环境:
$ docker run --name mongo -d mongo:3
$ docker run --name elasticsearch \
-e "http.host=0.0.0.0" -e "xpack.security.enabled=false" \
-d docker.elastic.co/elasticsearch/elasticsearch:6.5.1
$ docker run --link mongo --link elasticsearch \
-p 9000:9000 -p 12201:12201 -p 514:514 \
-e GRAYLOG_WEB_ENDPOINT_URI="http://127.0.0.1:9000/api" \
-d graylog/graylog:2.5
如何获取日志数据
你可以在System -> Inputs下创建不同类型的input,但是只能使用已正确映射到Docker容器的端口,否则数据不会通过。
例如,在端口5555上启动Raw/Plaintext TCP input,停止容器并重新创建它,同时将-p 5555:5555参数附加到docker run命令:
$ docker run --link mongo --link elasticsearch \
-p 9000:9000 -p 12201:12201 -p 514:514 -p 5555:5555 \
-e GRAYLOG_WEB_ENDPOINT_URI="http://127.0.0.1:9000/api" \
-d graylog/graylog:2.5
类似地,可以通过附加-p 5555:5555/udp选项对UDP进行相同操作。
然后,您可以使用以下命令向端口5555上运行的Graylog Raw/Plaintext TCP input发送纯文本消息:
$ echo 'First log message' | nc localhost 5555
设置
Graylog带有一个默认配置,可以开箱即用,但是你必须给admin用户设置一个密码。此外,Web界面需要知道如何从您的浏览器连接到Graylog REST API。
两者都可以通过设置环境变量来完成(参见Configuration):
-e GRAYLOG_ROOT_PASSWORD_SHA2=8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918
-e GRAYLOG_WEB_ENDPOINT_URI="http://127.0.0.1:9000/api"
在这个示例中,您可以使用用户名admin和密码admin登录到Graylog。
可以使用此命令生成自己的密码,然后将SHA-256哈希放入GRAYLOG_ROOT_PASSWORD_SHA2环境变量中:
echo -n "Enter Password: " && head -1 </dev/stdin | tr -d '\n' | sha256sum | cut -d" " -f1
所有这些设置和命令行参数都可以放在docker-compose.yml文件中,这样就不必一个接一个地执行它们。
示例:
version: '2'
services:
# MongoDB: https://hub.docker.com/_/mongo/
mongodb:
image: mongo:3
# Elasticsearch: https://www.elastic.co/guide/en/elasticsearch/reference/6.x/docker.html
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:6.5.1
environment:
- http.host=0.0.0.0
- transport.host=localhost
- network.host=0.0.0.0
# Disable X-Pack security: https://www.elastic.co/guide/en/elasticsearch/reference/6.x/security-settings.html#general-security-settings
- xpack.security.enabled=false
- xpack.watcher.enabled=false
- xpack.monitoring.enabled=false
- xpack.security.audit.enabled=false
- xpack.ml.enabled=false
- xpack.graph.enabled=false
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
mem_limit: 1g
# Graylog: https://hub.docker.com/r/graylog/graylog/
graylog:
image: graylog/graylog:2.5
environment:
# CHANGE ME!
- GRAYLOG_PASSWORD_SECRET=somepasswordpepper
# Password: admin
- GRAYLOG_ROOT_PASSWORD_SHA2=8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918
- GRAYLOG_WEB_ENDPOINT_URI=http://127.0.0.1:9000/api
links:
- mongodb:mongo
- elasticsearch
depends_on:
- mongodb
- elasticsearch
ports:
# Graylog web interface and REST API
- 9000:9000
# Syslog TCP
- 514:514
# Syslog UDP
- 514:514/udp
# GELF TCP
- 12201:12201
# GELF UDP
- 12201:12201/udp
运行docker-compose up启动所有三个Docker容器后,您可以在Web浏览器中打开URL: http://127.0.0.1:9000并使用用户名admin和密码admin登录(生产中请使用更复杂的密码)。
配置
每个配置选项都可以通过环境变量设置。只需在参数名前面加上GRAYLOG_,并将其全部大写。
例如,设置SMTP配置以通过电子邮件发送Graylog警报通知,docker-compose.yml如下所示:
version: '2'
services:
mongo:
image: "mongo:3"
# Other settings [...]
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:6.5.1
# Other settings [...]
graylog:
image: graylog/graylog:2.5
# Other settings [...]
environment:
GRAYLOG_TRANSPORT_EMAIL_ENABLED: "true"
GRAYLOG_TRANSPORT_EMAIL_HOSTNAME: smtp
GRAYLOG_TRANSPORT_EMAIL_PORT: 25
GRAYLOG_TRANSPORT_EMAIL_USE_AUTH: "false"
GRAYLOG_TRANSPORT_EMAIL_USE_TLS: "false"
GRAYLOG_TRANSPORT_EMAIL_USE_SSL: "false"
另一种选择是将配置文件放在容器之外并直接编辑它。
自定义配置文件
您可以覆盖默认的Graylog配置文件,而不是使用很长的环境变量列表来配置Graylog(请参阅Configuration)。
默认的配置文件存储在Docker容器内的/usr/share/graylog/data/config/中。
在docker-compose.yml文件旁边创建新的配置目录,并从GitHub复制默认文件:
$ mkdir -p ./graylog/config
$ cd ./graylog/config
$ wget https://raw.githubusercontent.com/Graylog2/graylog-docker/2.5/config/graylog.conf
$ wget https://raw.githubusercontent.com/Graylog2/graylog-docker/2.5/config/log4j2.xml
现在必须将带有自定义配置文件的新创建的目录./graylog/config/挂载到Graylog Docker容器中。这可以通过在docker-compose.yml文件的volumes部分添加一个条目来完成:
version: '2'
services:
mongodb:
image: mongo:3
# Other settings [...]
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:6.5.1
# Other settings [...]
graylog:
image: graylog/graylog:2.5
# Other settings [...]
volumes:
# Mount local configuration directory into Docker container
- ./graylog/config:/usr/share/graylog/data/config
持久化数据
为了使记录的数据持久保存,您可以使用外部卷来存储所有数据。
如果容器重新启动,可以很简单的继续使用已有数据。
使用Docker volumes存储MongoDB,Elasticsearch和Graylog的数据,docker-compose.yml文件如下所示:
version: '2'
services:
# MongoDB: https://hub.docker.com/_/mongo/
mongodb:
image: mongo:3
volumes:
- mongo_data:/data/db
# Elasticsearch: https://www.elastic.co/guide/en/elasticsearch/reference/6.x/docker.html
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:6.5.1
volumes:
- es_data:/usr/share/elasticsearch/data
environment:
- http.host=0.0.0.0
- transport.host=localhost
- network.host=0.0.0.0
# Disable X-Pack security: https://www.elastic.co/guide/en/elasticsearch/reference/6.x/security-settings.html#general-security-settings
- xpack.security.enabled=false
- xpack.watcher.enabled=false
- xpack.monitoring.enabled=false
- xpack.security.audit.enabled=false
- xpack.ml.enabled=false
- xpack.graph.enabled=false
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
mem_limit: 1g
# Graylog: https://hub.docker.com/r/graylog/graylog/
graylog:
image: graylog/graylog:2.5
volumes:
- graylog_journal:/usr/share/graylog/data/journal
environment:
# CHANGE ME!
- GRAYLOG_PASSWORD_SECRET=somepasswordpepper
# Password: admin
- GRAYLOG_ROOT_PASSWORD_SHA2=8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918
- GRAYLOG_WEB_ENDPOINT_URI=http://127.0.0.1:9000/api
links:
- mongodb:mongo
- elasticsearch
depends_on:
- mongodb
- elasticsearch
ports:
# Graylog web interface and REST API
- 9000:9000
# Syslog TCP
- 514:514
# Syslog UDP
- 514:514/udp
# GELF TCP
- 12201:12201
# GELF UDP
- 12201:12201/udp
# Volumes for persisting data, see https://docs.docker.com/engine/admin/volumes/volumes/
volumes:
mongo_data:
driver: local
es_data:
driver: local
graylog_journal:
driver: local
启动所有服务:
$ docker-compose up
插件
为了添加插件,您可以根据现有的graylog/graylog Docker镜像构建一个新镜像,其中包含所需的插件,或者添加一个指向本地插件的volume。
新的docker镜像
只需在空目录中创建一个新的Dockerfile,其中包含以下内容:
FROM graylog/graylog:2.5
RUN wget -O /usr/share/graylog/plugin/graylog-plugin-auth-sso-2.5.0.jar https://github.com/Graylog2/graylog-plugin-auth-sso/releases/download/2.5.0/graylog-plugin-auth-sso-2.5.0.jar
使用这个Dockerfile构建一个新镜像(参阅docker build):
$ docker build -t graylog-with-sso-plugin .
注意此行命令后面的 . 点符号
在此示例中,我们使用已安装的SSO 插件创建一个新镜像。现在使用新镜像替换graylog/graylog。
docker-compose.yml文件引用新的Docker镜像:
version: '2'
services:
mongo:
image: "mongo:3"
# Other settings [...]
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:6.5.1
# Other settings [...]
graylog:
image: graylog-with-sso-plugin
# Other settings [...]
Volume-mounted插件
除了构建新的docker镜像,还可以通过直接将它们挂载到原始Docker镜像的plugin
文件夹中来添加其他插件。 这样,每次要添加新插件(或删除旧插件)时,都不必创建新的docker镜像。
只需在宿主机创建一个插件文件夹,下载要安装的插件,然后将每个文件作为附加卷挂载到docker容器中:
$ mkdir -p ./graylog/plugin
$ wget -O ./graylog/plugin/graylog-plugin-auth-sso-2.5.0.jar https://github.com/Graylog2/graylog-plugin-auth-sso/releases/download/2.5.0/graylog-plugin-auth-sso-2.5.0.jar
docker-compose.yml文件如下所示:
version: '2'
services:
mongo:
image: "mongo:3"
# Other settings [...]
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:6.5.1
# Other settings [...]
graylog:
image: graylog/graylog:2.5
# Other settings [...]
volumes:
# Mount local plugin file into Docker container
- ./graylog/plugin/graylog-plugin-auth-sso-2.5.0.jar:/usr/share/graylog/plugin/graylog-plugin-auth-sso-2.5.0.jar
您可以在docker-compose.yml文件中添加任意数量的volumes。 只需重新启动容器,docker将重新创建包含新volumes的graylog容器:
$ docker-compose restart
故障排除
- 如果您看到有关打开文件限制的警告,请尝试从容器外部设置ulimit:
$ docker run --ulimit nofile=64000:64000 ...
devicemapper
存储驱动可能会在某些系统上产生Graylogs磁盘日志的问题。 在这种情况下,请选择其他驱动程序,如aufs
或overlay
。
测试beta版本
警告
如果您是经验丰富的Graylog用户并且知道自己在做什么,您可以尝试使用预发布版本。
您也可以使用Docker运行Graylog的预发布版本(alpha版,beta版或RC版)。
预发布版本也标记在graylog/graylog Docker镜像中。
按照Docker Hub上Graylog镜像的文档,选择一个alpha / beta / rc标签,如下所示:
$ docker run --link mongo --link elasticsearch -p 9000:9000 -p 12201:12201 -p 514:514 \
-e GRAYLOG_WEB_ENDPOINT_URI="http://127.0.0.1:9000/api" \
-d graylog/graylog:2.5.0-1