当前位置: 首页 > web >正文

ELK简介和docker版安装

使用场景

主要还是给开发人员“打捞日志”用的。

ELK 是由三个开源工具组成的套件(Elasticsearch、Logstash 和 Kibana),主要用于日志的收集、分析和可视化。以下是 ELK 常见的使用场景:
日志集中化管理
收集来自多个服务器或服务的日志,集中存储在 Elasticsearch 中。
开发人员可以通过 Kibana 快速查找和分析日志,用于排查问题。
实时日志分析
通过 Logstash 或 Filebeat 收集实时日志数据,并进行结构化处理。
利用 Elasticsearch 提供强大的搜索能力,快速检索特定的日志信息。
监控与告警
可以结合其他工具(如 Metricbeat)监控系统性能指标。
实现对异常行为或错误日志的实时告警。
安全审计与合规性检查
记录并分析用户访问、操作等行为日志,满足安全审计需求。
追踪潜在的安全威胁或非法活动。
业务数据分析
不仅限于技术日志,还可以用来分析业务数据,例如用户行为、点击流数据等。
开发调试支持
确实,ELK 被广泛用于开发人员“打捞”日志,帮助定位生产环境中的问题。
结合时间戳、请求 ID、用户 ID 等信息,可以快速找到特定请求链路的日志。
总结: ELK 并不只是为开发人员“打捞日志”而设计,但它的确是一个非常强大的工具,能够帮助开发、运维以及安全团队更好地理解和利用日志数据。

什么规模和需求需要部署ELK

应考虑部署 ELK 的典型场景包括:
服务器数量 ≥ 3 台
每天日志总量 ≥ 1GB
需要跨服务、跨时间点的日志关联查询
需要实时监控、告警、可视化
有开发排查、运维巡检、安全审计等多角色协作需求
如果你目前只是几个小型项目,日志量不大,也可以先使用轻量级方案(如 Filebeat + Elasticsearch 单节点),逐步过渡到完整 ELK 架构。

docker部署http版

docker部署 http版 这个版本基本上不需要踩坑,适合开发测试环境搭建

Dockerfile

version: '3.7'services:elasticsearch:image: docker.elastic.co/elasticsearch/elasticsearch:8.11.3container_name: elasticsearchenvironment:- discovery.type=single-node- ES_JAVA_OPTS=-Xms1g -Xmx1g- xpack.security.enabled=false- TZ=Asia/Shanghaiports:- "9200:9200"- "9300:9300"volumes:- es_data:/usr/share/elasticsearch/datanetworks:- elklogstash:image: docker.elastic.co/logstash/logstash:8.11.3container_name: logstashdepends_on:- elasticsearchports:- "5044:5044"     # Beats 输入- "9600:9600"     # 监控端口environment:- LOGSTASH_KEYSTORE_PASSWORD=secret- TZ=Asia/Shanghaivolumes:- ./logstash/pipeline:/usr/share/logstash/pipeline#- ./logstash/config:/usr/share/logstash/confignetworks:- elkkibana:image: docker.elastic.co/kibana/kibana:8.11.3container_name: kibanadepends_on:- elasticsearchports:- "5601:5601"environment:- ELASTICSEARCH_HOSTS=http://elasticsearch:9200- TZ=Asia/Shanghainetworks:- elknetworks:elk:
volumes:es_data:

用到的文件

./logstash/pipeline/main.conf

input {beats {port => 5044}
}filter {grok {match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} $$%{DATA:thread}$$ %{LOGLEVEL:level} %{JAVACLASS:logger} - %{GREEDYDATA:message}" }}date {match => [ "timestamp", "yyyy-MM-dd HH:mm:ss" ]}
}output {elasticsearch {hosts => ["http://elasticsearch:9200"]index => "app-logs-%{+YYYY.MM.dd}"}
}

logstash.yml

http.host: "0.0.0.0"
xpack.monitoring.elasticsearch.hosts: [ "http://elasticsearch:9200" ]

测试访问
elasticsearch:
http://ip:9200/
logstash:
http://ip:9600/
kibana:
http://ip:5601/

docker部署https版

docker部署 https版 这个版本需要解决证书问题,授权账号问题 适合生产环境

Dockerfile

version: '3.7'services:elasticsearch:image: docker.elastic.co/elasticsearch/elasticsearch:8.11.3container_name: elasticsearchhostname: elasticsearchenvironment:- discovery.type=single-node- ES_JAVA_OPTS=-Xms1g -Xmx1g- xpack.security.enabled=false- TZ=Asia/Shanghaiports:- "9200:9200"- "9300:9300"volumes:- es_data:/usr/share/elasticsearch/datanetworks:- elklogstash:image: docker.elastic.co/logstash/logstash:8.11.3container_name: logstashdepends_on:- elasticsearchports:- "5044:5044"     # Beats 输入- "9600:9600"     # 监控端口environment:- LOGSTASH_KEYSTORE_PASSWORD=secret- TZ=Asia/Shanghaivolumes:- ./logstash/pipeline:/usr/share/logstash/pipeline#- ./logstash/config:/usr/share/logstash/confignetworks:- elkkibana:image: docker.elastic.co/kibana/kibana:8.11.3container_name: kibanadepends_on:- elasticsearchports:- "5601:5601"environment:- ELASTICSEARCH_HOSTS=https://elasticsearch:9200- TZ=Asia/Shanghainetworks:- elknetworks:elk:
volumes:es_data:

用到的文件

./logstash/pipeline/main.conf

input {beats {port => 5044}
}filter {grok {match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} $$%{DATA:thread}$$ %{LOGLEVEL:level} %{JAVACLASS:logger} - %{GREEDYDATA:message}" }}date {match => [ "timestamp", "yyyy-MM-dd HH:mm:ss" ]}
}output {elasticsearch {hosts => ["http://elasticsearch:9200"]index => "app-logs-%{+YYYY.MM.dd}"}
}

./logstash/pipeline/logstash.yml

http.host: "0.0.0.0"
xpack.monitoring.elasticsearch.hosts: [ "https://elasticsearch:9200" ]

测试访问
elasticsearch:
https://ip:9200/ 账号elastic 密码通过下面命令设置 注意这里是https
logstash:
http://ip:9600/
kibana:
http://ip:5601/ 账号 kibana 密码通过下面命令设置


先设置elasticsearch密码
docker exec -u 0 -it elasticsearch /bin/bash
cd /usr/share/elasticsearch/bin
elasticsearch-setup-passwords interactive
 


早期版本授权

早期的版本是需要输入 elasticsearch的token和kibana的六位授权码

elasticsearch令牌生成

docker exec -it elasticsearch bash
cd /usr/share/elasticsearch/bin
elasticsearch-create-enrollment-token --scope kibana

生成token

eyJ2ZXIiOiI4LjExLjMiLCJhZHIiOlsiMTcyLjIxLjAuMjo5MjAwIl0sImZnciI6Ijg1ODI4ZWJjZTQzOWQzMzJhZDkzODg5YzRkMTQ4Y2RhZWFmYzQyYmY1ZmM0MDgyN2E2YWEzNmI3MzliYWVlNWQiLCJrZXkiOiJmOXlwNjVZQklPWHhvUF9pNWF1UTpTZHpoczFDZFNqQ0ZVMmZ5M1B4aTN3In0=

kibana的六位授权码获取

docker exec -it kibana bash
cd /usr/share/kibana/bin
./kibana-verification-code


(实际上执行 docker logs kibana 也能看到)


最新版本授权


先解决自签证书问题


elasticsearch的ca证书导入到kibana并配置

docker cp elasticsearch:/usr/share/elasticsearch/config/certs/http_ca.crt .
docker cp http_ca.crt kibana:/usr/share/kibana/config/certs/


kibana的yaml文件(/usr/share/kibana/config/kibana.yml)配置 添加

elasticsearch.ssl.certificateAuthorities: "/usr/share/kibana/config/certs/http_ca.crt"

再解决elasticsearch的授权问题

添加后还报错,需要解决kibana访问elasticsearch的授权问题

[2025-05-20T14:29:50.568+08:00][ERROR][elasticsearch-service] Unable to retrieve version information from Elasticsearch nodes. security_exceptionRoot causes:security_exception: missing authentication credentials for REST request [/_nodes?filter_path=nodes.*.version%2Cnodes.*.http.publish_address%2Cnodes.*.ip]
[2025-05-20T14:29:59.072+08:00][INFO ][plugins.screenshotting.chromium] Browser executable: /usr/share/kibana/node_modules/@kbn/screenshotting-plugin/chromium/headless_shell-linux_x64/headless_shell


解决方法 进 elasticsearch 重置 kibana_system密码,然后配置到kibana.yml
重置kibana_system密码

docker exec -it elasticsearch bash
cd /usr/share/elasticsearch/bin
elasticsearch-reset-password -u kibana_system --interactive

kibana_system添加 

# 安全认证配置
elasticsearch.username: "kibana_system"
elasticsearch.password: "password"


重置后访问 http://ip:5601/
不能用kibana_system账号,重置elastic密码用elastic登录,或者用kibana账号登录
 

http://www.xdnf.cn/news/7578.html

相关文章:

  • 硬件工程师笔记——三极管Multisim电路仿真实验汇总
  • 深入浅出:Spring Cloud Gateway 扩展点实践指南
  • Zookeeper 集群安装与脚本化管理详解
  • 【笔记】与PyCharm官方沟通解决开发环境问题
  • 测试W5500的第2步_使用ioLibrary库创建TCP客户端
  • 【razor】回环结构导致的控制信令错位:例如发送端收到 SR的问题
  • k8s 配置 Kafka SASL_SSL双重认证
  • 计算机网络基础概念
  • 新能源汽车焊接智能节气阀
  • uni-app 中使用 mumu模拟器 进行调试和运行详细教程
  • Matplotlib 高级进阶实战:多维度数据可视化组合图表
  • nbufxz动态规划1
  • 零基础设计模式——创建型模式 - 工厂方法模式
  • 【课堂笔记】核方法和Mercer定理
  • [Java实战]Spring Boot整合Sentinel:流量控制与熔断降级实战(二十九)
  • 数据集划分与格式转换:从原始数据到模型训练的关键步骤
  • 在 Excel 中使用通义灵码辅助开发 VBA 程序
  • 自学嵌入式 day21 - 数据结构 双向链表
  • 全局对比度调整
  • MCP 协议传输机制大变身:抛弃 SSE,投入 Streamable HTTP 的怀抱
  • taro 小程序 CoverImage Image src无法显示图片的问题
  • 剧本杀小程序:指尖上的沉浸式推理宇宙
  • 【Linux笔记】——线程同步信号量与环形队列生产者消费者模型的实现(PV操作)
  • shp2pgsql 导入 Shp 到 PostGIS 空间数据库
  • MATLAB中进行语音信号分析
  • Kotlin 协程 (一)
  • 对冲策略加仓止损盈思路
  • 数组的概述
  • 反射在spring boot自动配置的应用
  • Mysql 中的日期时间函数汇总