文档/教程【免费下载链接】90DaysOfDevOpsThis repository started out as a learning in public project for myself and has now become a structured learning map for many in the community. We have 3 years under our belt covering all things DevOps, including Principles, Processes, Tooling and Use Cases surrounding this vast topic.项目地址https://gitcode.com/gh_mirrors/90/90DaysOfDevOps点击查看免费下载本指南以 90DaysOfDevOps 仓库中 Elastic Stack 示例栈docker-compose.yaml为基础系统讲解其extensions/目录下六类第三方扩展——APM Server、Filebeat、Metricbeat、Logspout、Curator、Enterprise Search——的启用方式、配置细节与源码级实现依据。读完本文你将掌握基础 compose 文件 扩展 compose 文件的多文件叠加部署模式能够按需为本地 ELK 栈接入 APM 链路追踪、日志与指标采集、容器日志汇聚、索引生命周期管理以及企业级搜索能力并了解每类扩展在仓库中的真实配置与 Dockerfile 构建方式。扩展机制总览docker-compose 多文件叠加部署整个 Elastic Stack 示例基于根目录 docker-compose.yaml 定义的核心服务setup、elasticsearch、logstash、kibana并约定以下前置条件版本统一通过ELASTIC_VERSION构建参数注入如docker.elastic.co/enterprise-search/enterprise-search:${ELASTIC_VERSION}保证各组件版本一致密码统一通过.env文件中的环境变量注入核心服务在首次启动时由setup服务执行 entrypoint.sh 初始化logstash_internal、kibana_system等内置用户所有服务挂载在同一个elk桥接网络中容器间通过服务名互相访问例如http://elasticsearch:9200、http://apm-server:8200。每个扩展对应目录下都提供一份独立的name-compose.yml覆盖文件与基础文件合并启动语法统一为$ docker-compose -f docker-compose.yml -f extensions/name/name-compose.yml up该模式使得核心栈保持最小化扩展按需加载、随时可移除。下面逐一解析六个扩展的实战用法与底层配置。一、APM Server接入应用性能监控APM1.1 扩展定位与启动APM Server 负责接收来自各类 APM Agent 的性能数据将其转换为 Elasticsearch 文档供 Kibana 可视化。仓库中 APM Server 的启动方式为$ docker-compose -f docker-compose.yml -f extensions/apm-server/apm-server-compose.yml up对应的 apm-server-compose.yml 暴露8200端口APM 协议默认端口以只读方式挂载配置文件并通过--strict.permsfalse关闭 libbeat 对配置文件属主/权限的严格校验详见 libbeat 的 config-file-permissions 机制同时声明对elasticsearch服务的启动依赖。从 apm-server.yml 可看到输出目标的完整配置apm-server: host: 0.0.0.0:8200 output: elasticsearch: hosts: [http://elasticsearch:9200] username: elastic password: ${ELASTIC_PASSWORD}即 APM Server 监听所有网卡的8200端口把转换后的文档写入elasticsearch:9200身份使用elastic用户与仓库.env中定义的ELASTIC_PASSWORD。镜像基于官方 Dockerfile 从docker.elastic.co/apm/apm-server:${ELASTIC_VERSION}构建。1.2 将应用 Agent 连接到 APM Server文档给出最小化的 Agent 接入配置——只需指定服务名与服务器地址。以下为 Python Flask 应用的示例使用elastic-apm客户端import elasticapm from elasticapm.contrib.flask import ElasticAPM from flask import Flask app Flask(__name__) app.config[ELASTIC_APM] { # 必填的服务名允许字符a-z、A-Z、0-9、-、_ 和空格 SERVICE_NAME: PYTHON_FLASK_TEST_APP, # 自定义 APM Server 地址默认 http://localhost:8200 SERVER_URL: http://apm-server:8200, DEBUG: True, }关键点在于SERVER_URL使用容器网络内的服务名apm-server而非localhost这是因为 Agent 运行在其他容器中时必须通过elk网络解析服务名。各语言 Agent 的完整配置项可查阅仓库对应语言的 APM 接入文档。1.3 在 Kibana 中校验连通并导入默认仪表盘APM 接入后需在 Kibana 完成初始化文档列出五步操作流程在 Kibana 首页的Observability面板中点击Add APM点击Check APM Server status确认服务已启动点击Check agent status验证 Agent 已正确注册点击Load Kibana objects创建 APM 的索引模式点击Launch APM进入 APM 仪表盘。二、Filebeat轻量级日志采集与转发2.1 扩展定位与启动Filebeat 是安装在业务服务器上的轻量级日志 shipper它监控指定日志文件或位置采集日志事件并转发给 Elasticsearch 或 Logstash 进行索引。启动命令$ docker-compose -f docker-compose.yml -f extensions/filebeat/filebeat-compose.yml up2.2 容器级配置剖析filebeat-compose.yml 中有三个值得关注的细节以user: root运行镜像默认用户filebeat的 uid 为 1000以便读取宿主机的docker.sock与文件系统通过-e参数将日志输出到 stderr便于docker logs查看以只读方式绑定挂载/var/lib/docker/containers读取容器日志文件与/var/run/docker.sock调用 Docker API 做自动发现。filebeat.yml 是核心配置它采用 Docker 自动发现模式无需逐个手工指定日志路径filebeat.config: modules: path: ${path.config}/modules.d/*.yml reload.enabled: false filebeat.autodiscover: providers: # Docker 自动发现容器启动/停止时自动获取其日志 - type: docker hints.enabled: true processors: - add_cloud_metadata: ~ output.elasticsearch: hosts: [http://elasticsearch:9200] username: elastic password: ${ELASTIC_PASSWORD} http.enabled: true http.host: 0.0.0.0filebeat.autodiscover.providers使用docker类型并开启hints.enabled配合容器 Label 即可自动采集新起容器的日志processors.add_cloud_metadata在事件中附加云厂商元数据http.enabled: true开启 HTTP 健康检查端点默认端口 5066方便编排系统探活。配置变更后需重启容器生效$ docker-compose -f docker-compose.yml -f extensions/filebeat/filebeat-compose.yml restart filebeat三、Metricbeat系统与服务的周期性指标采集3.1 扩展定位与启动Metricbeat 安装在服务器上周期性采集操作系统与运行中服务的指标并投递到 Elasticsearch 或 Logstash。启动命令$ docker-compose -f docker-compose.yml -f extensions/metricbeat/metricbeat-compose.yml up3.2 宿主系统指标采集的特殊挂载与 Filebeat 不同Metricbeat 要采集的是宿主机自身的 CPU、内存、磁盘、网络等指标因此 metricbeat-compose.yml 的挂载更为复杂以user: root运行并加--system.hostfs/hostfs指定宿主文件系统挂载点只读绑定/→/hostfs、/sys/fs/cgroup→/hostfs/sys/fs/cgroup、/proc→/hostfs/proc使容器内 metricbeat 能读取宿主资源数据绑定/var/run/docker.sock以启用 Docker 模块。metricbeat.yml 中定义了 docker 模块的指标集与采样周期metricbeat.config: modules: path: ${path.config}/modules.d/*.yml reload.enabled: false metricbeat.autodiscover: providers: - type: docker hints.enabled: true metricbeat.modules: - module: docker metricsets: - container - cpu - diskio - healthcheck - info #- image - memory - network hosts: [unix:///var/run/docker.sock] period: 10s enabled: true processors: - add_cloud_metadata: ~ output.elasticsearch: hosts: [http://elasticsearch:9200] username: elastic password: ${ELASTIC_PASSWORD} http.enabled: true http.host: 0.0.0.0period: 10s表示每 10 秒采样一次image指标集默认被注释可按需启用数据写入目标与 Filebeat 相同elasticsearch:9200elastic用户。变更配置后同样通过restart metricbeat生效。四、Logspout零配置的 Docker 容器日志汇聚4.1 扩展定位与启动Logspout 通过 Docker Logs API 收集所有容器的标准输出日志并直接转发给 Logstash无需任何额外配置即可覆盖整个栈的容器日志。启用方式$ docker-compose -f docker-compose.yml -f extensions/logspout/logspout-compose.yml up4.2 路由与环境变量logspout-compose.yml 通过环境变量完成路由配置services: logspout: volumes: - type: bind source: /var/run/docker.sock target: /var/run/docker.sock read_only: true environment: ROUTE_URIS: logstash://logstash:5000 LOGSTASH_TAGS: docker-elk depends_on: - logstash restart: on-failureROUTE_URIS: logstash://logstash:5000将日志路由到elk网络中的 Logstash 服务走 UDP 端口 5000LOGSTASH_TAGS: docker-elk为所有日志附加统一标签便于在 Kibana 中过滤restart: on-failure保证 Logspout 异常退出后自动拉起。自定义镜像通过 Dockerfile 基于gliderlabs/logspout:master构建并依赖 modules.go 以空白导入方式安装 Logstash 适配器及 TCP/UDP 传输模块import ( _ github.com/gliderlabs/logspout/healthcheck _ github.com/gliderlabs/logspout/transports/tcp _ github.com/gliderlabs/logspout/transports/udp _ github.com/looplab/logspout-logstash )4.3 Logstash 侧接收配置Logspout 的数据以 JSON 编码经 UDP 发送因此需要在 Logstash pipeline 中开启udp输入并将 codec 设为json仓库基础栈的 logstash.conf 即是配置入口input { udp { port 5000 codec json } }根目录 docker-compose.yaml 中已为 Logstash 预留5000/udp与5000/tcp端口映射正是为 Logspout 等 UDP 数据源准备的。五、CuratorElasticsearch 索引生命周期管理5.1 扩展定位与启动Elasticsearch Curator 用于索引的日常管理清理、归档、快照等。仓库示例将其与 cron 结合实现每 1 分钟自动执行一次索引清理任务。启用方式$ docker-compose -f docker-compose.yml -f extensions/curator/curator-compose.yml up5.2 连接配置与清理动作curator.yml 定义 Curator 与 Elasticsearch 的连接信息client: hosts: - elasticsearch port: 9200 http_auth: elastic:changeme logging: loglevel: INFO logformat: default注意该示例中的http_auth写的是示例密码changeme实际接入生产环境时需替换为仓库.env中真实的ELASTIC_PASSWORD值否则清理动作会因认证失败而不生效。清理策略定义在 delete_log_files_curator.ymlactions: 1: action: delete_indices description: - Delete indices. Find which to delete by first limiting the list to logstash- prefixed indices. Then further filter those to prevent deletion of anything less than the number of days specified by unit_count. Ignore the error if the filter does not result in an actionable list of indices (ignore_empty_list) and exit cleanly. options: ignore_empty_list: True disable_action: False filters: - filtertype: pattern kind: prefix value: logstash- - filtertype: age source: creation_date direction: older unit: days unit_count: 2该动作的筛选逻辑是先按索引名前缀logstash-圈定候选索引filtertype: patternkind: prefix再按索引创建时间过滤仅删除**早于 2 天unit_count: 2**的索引ignore_empty_list: True表示当过滤器未产生可操作索引列表时忽略报错、干净退出避免 cron 任务反复失败告警。5.3 cron 调度实现curator/Dockerfile 揭示了每分钟运行的具体实现基于bitnami/elasticsearch-curator:5.8.1镜像安装 cron 后在 crontab 中写入每分钟执行 curator 的指令入口命令为cron* * * * * root LC_ALLC.UTF-8 LANGC.UTF-8 \ /opt/bitnami/python/bin/curator \ --config/usr/share/curator/config/curator.yml \ /usr/share/curator/config/delete_log_files_curator.yml \ /proc/1/fd/1 2/proc/1/fd/2输出重定向到/proc/1/fd/1stdout与/proc/1/fd/2stderr使 cron 任务的日志对docker logs可见。curator-compose.yml 将两份配置文件以只读方式挂载进容器并声明对elasticsearch的启动依赖。六、Enterprise Search企业级搜索应用套件6.1 资源要求与端口Elastic Enterprise Search 是一套基于 Elastic Stack 的搜索应用产品组合内含 App Search、Workplace Search 等。启用前需注意至少 2 GB 可用内存在基础栈与其他扩展所需资源之外对外暴露 TCP 端口3002用于 Web UI 与 API。启动命令$ docker-compose -f docker-compose.yml -f extensions/enterprise-search/enterprise-search-compose.yml up6.2 三步前置配置缺一不可Enterprise Search 启动门槛较高文档明确列出三步必要配置步骤一生成加密密钥。Enterprise Search 在首次启动前必须配置一个或多个加密密钥否则服务拒绝启动。密钥可包含任意字符序列官方建议使用 256 位密钥。写入 enterprise-search.yml 的secret_management.encryption_keys字段支持列表式与内联式两种格式secret_management.encryption_keys: - my_first_encryption_key - my_second_encryption_key - ...secret_management.encryption_keys: [my_first_encryption_key, my_second_encryption_key, ...]可使用 OpenSSL 生成强密钥如 AES-256$ openssl enc -aes-256 -P enter aes-256-cbc encryption password: a strong password Verifying - enter aes-256-cbc encryption password: repeat your strong password ... keygenerated AES key步骤二启用 Elasticsearch 的 API key 服务。Enterprise Search 依赖 Elasticsearch 内置的 API key 服务由于基础栈默认未在 HTTP 接口上启用 TLS该服务默认是关闭的。需在 elasticsearch/config/elasticsearch.yml 中添加xpack.security.authc.api_key.enabled: true步骤三在 Kibana 中配置 Enterprise Search 主机。Kibana 充当 Enterprise Search 的管理界面需在 kibana/config/kibana.yml 中添加enterpriseSearch.host: http://enterprise-search:30026.3 首次启动与默认凭据完成上述配置后启动等待数分钟让服务初始化浏览器访问http://localhost:3002即可看到 Enterprise Search 首页。首次启动使用的默认凭据为用户名enterprise_search密码changeme6.4 密码安全与配置管理默认密码定义在 enterprise-search-compose.yml 的ENT_SEARCH_DEFAULT_PASSWORD环境变量中官方强烈建议在首次启动前改为强密码enterprise-search: environment: ENT_SEARCH_DEFAULT_PASSWORD: {{some strong password}}警告默认密码只能在首次启动时设置。密码一旦持久化到 Elasticsearch 中就只能通过 Elasticsearch API 修改无法再靠改环境变量覆盖。因此务必在第一次up之前完成修改。除配置文件外Enterprise Search 也支持通过 compose 环境变量覆盖配置项环境变量名使用点号转下划线命名示例enterprise-search: environment: ent_search.auth.source: standard worker.threads: 6配置变更后需重启容器生效$ docker-compose -f docker-compose.yml -f extensions/enterprise-search/enterprise-search-compose.yml restart enterprise-search6.5 完整核心配置解读enterprise-search.yml 除必填的加密密钥外还集中体现了容器化部署的关键参数# IP address Enterprise Search listens on ent_search.listen_host: 0.0.0.0 # URL at which users reach Enterprise Search / Kibana ent_search.external_url: http://localhost:3002 kibana.host: http://localhost:5601 # Elasticsearch URL and credentials elasticsearch.host: http://elasticsearch:9200 elasticsearch.username: elastic elasticsearch.password: ${ELASTIC_PASSWORD} # Allow Enterprise Search to modify Elasticsearch settings. Used to enable auto-creation of Elasticsearch indexes. allow_es_settings_modification: trueent_search.listen_host: 0.0.0.0监听所有网络接口配合 compose 的3002:3002端口映射供宿主机访问elasticsearch.host指向容器网络内的elasticsearch:9200凭据复用elastic与.env中的ELASTIC_PASSWORDallow_es_settings_modification: true允许 Enterprise Search 修改 Elasticsearch 设置以启用索引自动创建同文件对应的 compose 覆盖配置中JAVA_OPTS: -Xmx2g -Xms2g保证了前述 2 GB 内存下限的落地。扩展运行前提与常见注意事项版本一致性所有扩展镜像均通过ELASTIC_VERSION构建参数与基础栈锁定同一版本如 apm-server/Dockerfile、filebeat/Dockerfile、metricbeat/Dockerfile、enterprise-search/Dockerfile 均取自docker.elastic.co官方镜像仓库混用版本可能造成协议或文档兼容问题。密码注入扩展输出配置大量使用${ELASTIC_PASSWORD}环境变量占位符见各扩展的 yml 配置启动前需确保.env文件已正确设置Curator 示例中的http_auth是硬编码的示例密码生产使用必须替换。只读挂载与权限配置文件统一采用:ro只读挂载运行时以--strict.permsfalseFilebeat/Metricbeat/APM Server规避容器外挂载文件导致的权限校验失败Metricbeat 还需--system.hostfs/hostfs配合宿主文件系统挂载才能采集真实系统指标。配置热更新方式Filebeat、Metricbeat、Enterprise Search 的配置变更均需通过docker-compose ... restart 服务名重启对应容器生效Logspout 通过环境变量路由修改后重新创建容器即可。容器编排顺序各扩展 compose 均通过depends_on声明对elasticsearch或logstash的依赖确保后端先就绪Logspout 与 Curator 还分别设置了restart: on-failure与init: true保证 cron 主进程以 PID 1 运行。通过以上六类扩展的组合可在同一套 Docker Compose 栈内实现链路追踪APM Server 应用日志Filebeat 系统/容器指标Metricbeat 容器日志聚合Logspout 索引治理Curator 搜索业务Enterprise Search的完整可观测与检索体系且每一类扩展都保持独立可插拔适合作为本地学习与实验环境的基础设施骨架。赞分享文档/教程【免费下载链接】90DaysOfDevOpsThis repository started out as a learning in public project for myself and has now become a structured learning map for many in the community. We have 3 years under our belt covering all things DevOps, including Principles, Processes, Tooling and Use Cases surrounding this vast topic.项目地址https://gitcode.com/gh_mirrors/90/90DaysOfDevOps点击查看免费下载相关推荐90DaysOfDevOps 实战在 Elastic Stack 中通过 Docker 扩展部署 Metricbeat 采集服务器指标90DaysOfDevOps 实战在 Elastic Stack 中通过 Docker 扩展部署 Metricbeat 采集服务器指标 本文以 90DaysO文档/教程90DaysOfDevOps 实战为 Elastic Stack 启用 APM Server 扩展并接入 Agent90DaysOfDevOps 实战为 Elastic Stack 启用 APM Server 扩展并接入 Agent 导读 本篇文章围绕 90DaysOfDe文档/教程90DaysOfDevOps 实战在 Elastic Stack 中通过 Docker Compose 集成 Filebeat 日志采集90DaysOfDevOps 实战在 Elastic Stack 中通过 Docker Compose 集成 Filebeat 日志采集 导读 本文聚焦于 9文档/教程上一篇5分钟告别黑苹果配置焦虑OpCore Simplify智能图形化工具深度解析下一篇如何永久保存微信聊天记录WeChatMsg终极数据留存指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考