
如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
本文档介绍如何使用https://hub.docker.com/r/sebp/elk/ Docker镜像,该镜像通过打包Elasticsearch、Logstash和Kibana(统称为ELK),提供便捷的集中式日志服务器和日志管理Web界面。
您需要:
Docker至少分配3GB内存 - Elasticsearch alone至少需要2GB内存才能运行。
mmap计数限制等于或大于262,144
在Linux上,使用sysctl vm.max_map_count在主机上查看当前值。注意,这些限制必须在主机上更改;无法从容器内更改。
要从https://hub.docker.com/r/eternaltyro/elk-aws-discovery/%E6%8B%89%E5%8F%96%E6%AD%A4%E9%95%9C%E5%83%8F%EF%BC%8C%E8%AF%B7%E6%89%93%E5%BC%80 shell 提示符并输入:
bash$ sudo docker pull sebp/elk
注意 – 此镜像已从https://github.com/eternaltyro/elk-docker-ec2-discovery%E4%B8%AD%E7%9A%84%E6%BA%90%E6%96%87%E4%BB%B6%E8%87%AA%E5%8A%A8%E6%9E%84%E5%BB%BA%E3%80%82%E5%A6%82%E6%9E%9C%E6%82%A8%E6%83%B3%E8%87%AA%E5%B7%B1%E6%9E%84%E5%BB%BA%E9%95%9C%E5%83%8F%EF%BC%8C%E8%AF%B7%E5%8F%82%E8%A7%81%E6%9E%84%E5%BB%BA%E9%95%9C%E5%83%8F%E9%83%A8%E5%88%86%E3%80%82
此镜像仅在ELK版本5.4.0上测试过。
注意 – 将启动整个ELK栈。有关选择性启动部分栈的信息,请参见选择性启动服务部分。
以下命令会发布ELK栈正常运行所需的端口:
注意 – 镜像还在9300端口上公开Elasticsearch的传输接口。使用docker命令的-p 9300:9300选项发布该端口。此传输接口主要用于Elasticsearch的Java客户端API,以及运行Elasticsearch集群。
默认情况下,启动容器时,所有三个ELK服务(Elasticsearch、Logstash、Kibana)都会启动。
可使用以下环境变量选择性启动部分服务:
ELASTICSEARCH_START:如果设置且值不为1,则不启动Elasticsearch。
LOGSTASH_START:如果设置且值不为1,则不启动Logstash。
KIBANA_START:如果设置且值不为1,则不启动Kibana。
例如,以下命令仅启动Elasticsearch:
bash$ sudo docker run -p 5601:5601 -p 9200:9200 -p 5044:5044 -it \ -e LOGSTASH_START=0 -e KIBANA_START=0 --name elk sebp/elk
注意,如果要在禁用Elasticsearch的情况下启动容器:
如果启用Logstash,则需要确保Logstash的Elasticsearch输出插件配置文件(/etc/logstash/conf.d/30-output.conf)指向Elasticsearch集群的主机,而不是localhost(这是ELK镜像中的默认值,因为默认情况下Elasticsearch和Logstash一起运行),例如:
output { elasticsearch { hosts => ["elk-master.example.com"] } }
类似地,如果启用Kibana,则必须先更新Kibana的kibana.yml配置文件,使elasticsearch.url设置(默认值:"http://localhost:9200")指向运行中的Elasticsearch实例。
以下环境变量可用于覆盖服务启动的默认值:
TZ:容器的时区(参见有效时区列表),例如America/Los_Angeles(默认是Etc/UTC,即UTC)。
ES_HEAP_SIZE:Elasticsearch堆大小(默认是最小256MB,最大1G)
指定堆大小(例如2g)将把最小和最大堆大小都设置为提供的值。要分别设置最小和最大堆大小,请参见下面的ES_JAVA_OPTS。
ES_JAVA_OPTS:Elasticsearch的其他Java选项(默认:"")
例如,要将最小和最大堆大小分别设置为512MB和2G,可将此环境变量设置为-Xms512m -Xmx2g。
ES_CONNECT_RETRY:启动Logstash和/或Kibana前等待Elasticsearch启动的秒数(默认:30)
CLUSTER_NAME:Elasticsearch集群名称(默认:如果Elasticsearch不需要用户认证,容器启动时自动解析)。
Elasticsearch集群名称用于设置容器运行时显示的Elasticsearch日志文件名称。默认情况下,集群名称在启动时通过***查询Elasticsearch的REST API自动解析(并填充CLUSTER_NAME)。但是,当Elasticsearch需要用户认证时(例如默认运行X-Pack时),此查询失败,容器停止,因为它认为Elasticsearch未正常运行。因此,CLUSTER_NAME环境变量可用于指定集群名称并绕过(失败的)自动解析。
LS_HEAP_SIZE:Logstash堆大小(默认:"500m")
LS_OPTS:Logstash选项(默认:标签为es231_l231_k450和es232_l232_k450的镜像中为"--auto-reload",latest标签中为"";参见重大更改)
NODE_OPTIONS:Kibana的Node选项(默认:"--max-old-space-size=250")
MAX_MAP_COUNT:mmap计数限制(默认:系统默认)
警告 – 此设置依赖系统:并非所有系统都允许从容器内设置此限制,您可能需要在启动容器前从主机设置(参见前提条件)。
MAX_OPEN_FILES:最大打开文件数(默认:系统默认;Elasticsearch需要此值至少为65536)
例如,以下命令启动栈,运行Elasticsarch的堆大小为2GB,Logstash的堆大小为1GB,且禁用Logstash的配置自动重载:
bash$ sudo docker run -p 5601:5601 -p 9200:9200 -p 5044:5044 -it \ -e ES_HEAP_SIZE="2g" -e LS_HEAP_SIZE="1g" -e LS_OPTS="--no-auto-reload" \ --name elk sebp/elk
从主机转发日志依赖于收集日志(例如从日志文件、syslog守护进程)并将其发送到Logstash实例的转发代理。
在要收集和转发日志的主机上安装Filebeat(参见参考资料部分获取详细说明链接)。
注意 – 确保Filebeat的版本与ELK镜像的版本相同。
Filebeat设置和配置示例
注意 – https://github.com/spujadas/elk-docker%E7%9A%84%60nginx-filebeat%60%E5%AD%90%E7%9B%AE%E5%BD%95%E5%8C%85%E5%90%AB%E7%A4%BA%E4%BE%8B%60Dockerfile%60%EF%BC%8C%E5%8F%AF%E7%94%A8%E4%BA%8E%E5%88%9B%E5%BB%BA%E5%AE%9E%E7%8E%B0%E4%BB%A5%E4%B8%8B%E6%AD%A5%E9%AA%A4%E7%9A%84Docker%E9%95%9C%E5%83%8F%E3%80%82
以下是Filebeat的示例/etc/filebeat/filebeat.yml配置文件,用于转发syslog、身份验证日志以及nginx日志。
yamloutput: logstash: enabled: true hosts: - elk:5044 ssl: certificate_authorities: - /etc/pki/tls/certs/logstash-beats.crt timeout: 15 filebeat: prospectors: - paths: - /var/log/syslog - /var/log/auth.log document_type: syslog - paths: - "/var/log/nginx/*.log" document_type: nginx-access
在示例配置文件中,确保将elk:5044中的elk替换为ELK服务主机的主机名或IP地址。
您还需要将logstash-beats.crt文件(包含Logstash的Beats输入插件的证书颁发机构证书(或自签名证书的服务器证书);有关证书的更多信息,请参见安全注意事项)从https://github.com/spujadas/elk-docker%E5%A4%8D%E5%88%B6%E5%88%B0%60/etc/pki/tls/certs/logstash-beats.crt%60%E3%80%82
注意 – 或者,在Windows机器上使用Filebeat时,无需使用certificate_authorities配置选项,可将logstash-beats.crt中的证书安装到Windows的“受信任的根证书颁发机构”存储中。
注意 – ELK镜像包含解析由上述Filebeat实例转发的nginx访问日志的配置项(/etc/logstash/conf.d/11-nginx.conf和/opt/logstash/patterns/nginx)。
首次启动Filebeat前,运行以下命令(将elk替换为相应的主机名)以在Elasticsearch中加载默认索引模板:
bashcurl -XPUT 'http://elk:9200/_template/filebeat?pretty' -d@/etc/filebeat/filebeat.template.json
启动Filebeat:
bashsudo /etc/init.d/filebeat start
要从源文件构建Docker镜像,请先克隆https://github.com/eternaltyro/elk-docker-ec2-discovery%EF%BC%8C%E8%BF%9B%E5%85%A5%E5%85%8B%E9%9A%86%E7%9B%AE%E5%BD%95%E7%9A%84%E6%A0%B9%E7%9B%AE%E5%BD%95%EF%BC%88%E5%8D%B3%E5%8C%85%E5%90%AB%60Dockerfile%60%E7%9A%84%E7%9B%AE%E5%BD%95%EF%BC%89%EF%BC%8C%E7%84%B6%E5%90%8E%EF%BC%9A
如果使用普通docker命令,运行sudo docker build -t <repository-name> .,其中<repository-name>是应用于镜像的仓库名称,之后可使用docker run命令运行镜像。
如果使用Compose,运行sudo docker-compose build elk,这将使用源仓库中的docker-compose.yml文件构建镜像。然后可使用sudo docker-compose up运行构建的镜像。
有多种调整镜像的方法:
将镜像用作基础镜像并扩展它,添加文件(例如处理日志生成应用发送的日志的配置文件、Elasticsearch插件)和覆盖文件(例如配置文件、证书和私钥文件)。有关编写Dockerfile的更多信息,请参见Docker的Dockerfile参考页面。
通过将本地文件绑定挂载到容器中的文件来替换现有文件。有关卷和绑定挂载的更多信息,请参见Docker的管理容器中的数据页面。
Fork源Git仓库并进行修改。
以下小节介绍一些典型用例。
镜像包含多个Logstash配置文件(例如01-lumberjack-input.conf、02-beats-input.conf),均位于/etc/logstash/conf.d。
要修改现有配置文件,可在运行时将本地配置文件绑定挂载到容器中的配置文件。例如,如果要将镜像的30-output.conf Logstash配置文件替换为本地文件/path/to/your-30-output.conf,可在docker命令行中添加以下-v选项:
bash$ sudo docker run ... \ -v /path/to/your-30-output.conf:/etc/logstash/conf.d/30-output.conf \ ...
要创建包含更新或其他配置文件的自己的镜像,可创建扩展原始镜像的Dockerfile,内容如下:
dockerfileFROM sebp/elk # 覆盖现有文件 ADD /path/to/your-30-output.conf /etc/logstash/conf.d/30-output.conf # 添加新文件 ADD /path/to/new-12-some-filter.conf /etc/logstash/conf.d/12-some-filter.conf
然后使用docker build语法构建扩展镜像。
镜像中Elasticsearch的主目录是/opt/elasticsearch,其插件管理脚本(elasticsearch-plugin)位于bin子目录,插件安装在plugins中。
Elasticsearch以elasticsearch用户身份运行。为避免权限问题,建议使用gosu命令以elasticsearch用户身份安装Elasticsearch插件(参见下面的示例和参考资料了解更多详情)。
以下Dockerfile将扩展基础镜像并安装GeoIP处理器插件(用于添加IP地址的地理位置信息):
dockerfileFROM sebp/elk ENV ES_HOME /opt/elasticsearch WORKDIR ${ES_HOME} RUN gosu elasticsearch bin/elasticsearch-plugin install \ -Edefault.path.conf=/etc/elasticsearch ingest-geoip
现在可以构建新镜像(参见上面的构建镜像部分),并以与基础镜像相同的方式运行容器。
镜像中Logstash的主目录名称存储在LOGSTASH_HOME环境变量中(基础镜像中设置为/opt/logstash)。Logstash的插件管理脚本(logstash-plugin)位于bin子目录。
Logstash以logstash用户身份运行。为避免权限问题,建议使用gosu命令以logstash用户身份安装Logstash插件(参见下面的示例和参考资料了解更多详情)。
以下Dockerfile可用于扩展基础镜像并安装RSS输入插件:
dockerfileFROM sebp/elk WORKDIR ${LOGSTASH_HOME} RUN gosu logstash bin/logstash-plugin install logstash-input-rss
有关构建新镜像的说明,请参见上面的构建镜像部分。然后可使用与使用方法部分相同的命令行运行基于此镜像的容器。
镜像中Kibana的主目录名称存储在KIBANA_HOME环境变量中(基础镜像中设置为/opt/kibana)。Kibana的插件管理脚本(kibana-plugin)位于bin子目录,插件安装在installedPlugins中。
Kibana以kibana用户身份运行。为避免权限问题,建议使用gosu命令以kibana用户身份安装Kibana插件(参见下面的示例和参考资料了解更多详情)。
以下Dockerfile可用于扩展基础镜像并安装最新版本的Sense插件(一个用于与Elasticsearch的REST API交互的便捷控制台):
dockerfileFROM seb
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务