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

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账号登录
 

相关文章:

  • 【C++】vector:容器的别样风采
  • window 显示驱动开发-准备 DMA 缓冲区
  • 日志根因分析:Elastic Observability 的异常检测与日志分类功能
  • 企业终端设备的安全管控
  • 基于Spring Boot与jQuery的用户管理系统开发实践✨
  • 自动化测试核心知识梳理与 Java 代码详解
  • Python列表推导式和生成器表达式详解
  • 【鸿蒙开发】安全
  • CentOS 7连接公司网络配置指南
  • c++学习方向选择说明
  • 普通人如何开发并训练自己的脑力?
  • 【移动应用安全】Android系统安全与保护机制
  • python学习day2
  • BeanFactory和FactoryBean的区别
  • 怎么样进行定性分析
  • SeleniumBase - 多合一浏览器自动化框架
  • 初识函数------了解函数的定义、函数的参数、函数的返回值、说明文档的书写、函数的嵌套使用、变量的作用域(全局变量与局部变量)
  • leetcode hot100:一、解题思路大全:技巧(只出现一次的数字、多数元素、颜色分类、下一个排列、寻找重复数)、矩阵(矩阵置零、螺旋矩阵、旋转图像、搜索二维矩阵Ⅱ)
  • Python 训练营打卡 Day 29
  • 实战项目8(实训)
  • 22国外长联合声明:要求以方立即允许全面恢复对加沙援助
  • 新四军老战士、苏州市文联原副主席张景坤逝世
  • 住建部:目前已累计建设改造各类市政管网50万公里
  • 中青报聚焦上海社区心理服务:社工介入让居民“心畅”
  • 集齐中国泳坛“老中青”!200自潘展乐力压汪顺、孙杨夺冠
  • 雷军:小米芯片采用3纳米制程,首款SUV“YU7”即将发布