使用Docker安装Graylog

使用Docker安装Graylog
翻译自官方文档,原文链接

需要的组件

你需要一个较新的docker版本,安装地址

在这个章节,我们将使用以下docker镜像

快速开始

如果您只想在运行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磁盘日志的问题。 在这种情况下,请选择其他驱动程序,如aufsoverlay

测试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