ELK简介和docker版安装

news2025/5/25 1:48:50

使用场景

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

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.3
    container_name: elasticsearch
    environment:
      - discovery.type=single-node
      - ES_JAVA_OPTS=-Xms1g -Xmx1g
      - xpack.security.enabled=false
      - TZ=Asia/Shanghai
    ports:
      - "9200:9200"
      - "9300:9300"
    volumes:
      - es_data:/usr/share/elasticsearch/data
    networks:
      - elk

  logstash:
    image: docker.elastic.co/logstash/logstash:8.11.3
    container_name: logstash
    depends_on:
      - elasticsearch
    ports:
      - "5044:5044"     # Beats 输入
      - "9600:9600"     # 监控端口
    environment:
      - LOGSTASH_KEYSTORE_PASSWORD=secret
      - TZ=Asia/Shanghai
    volumes:
      - ./logstash/pipeline:/usr/share/logstash/pipeline
      #- ./logstash/config:/usr/share/logstash/config
    networks:
      - elk

  kibana:
    image: docker.elastic.co/kibana/kibana:8.11.3
    container_name: kibana
    depends_on:
      - elasticsearch
    ports:
      - "5601:5601"
    environment:
      - ELASTICSEARCH_HOSTS=http://elasticsearch:9200
      - TZ=Asia/Shanghai
    networks:
      - elk

networks:
  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.3
    container_name: elasticsearch
	hostname: elasticsearch
    environment:
      - discovery.type=single-node
      - ES_JAVA_OPTS=-Xms1g -Xmx1g
      - xpack.security.enabled=false
      - TZ=Asia/Shanghai
    ports:
      - "9200:9200"
      - "9300:9300"
    volumes:
      - es_data:/usr/share/elasticsearch/data
    networks:
      - elk

  logstash:
    image: docker.elastic.co/logstash/logstash:8.11.3
    container_name: logstash
    depends_on:
      - elasticsearch
    ports:
      - "5044:5044"     # Beats 输入
      - "9600:9600"     # 监控端口
    environment:
      - LOGSTASH_KEYSTORE_PASSWORD=secret
      - TZ=Asia/Shanghai
    volumes:
      - ./logstash/pipeline:/usr/share/logstash/pipeline
      #- ./logstash/config:/usr/share/logstash/config
    networks:
      - elk

  kibana:
    image: docker.elastic.co/kibana/kibana:8.11.3
    container_name: kibana
    depends_on:
      - elasticsearch
    ports:
      - "5601:5601"
    environment:
      - ELASTICSEARCH_HOSTS=https://elasticsearch:9200
      - TZ=Asia/Shanghai
    networks:
      - elk

networks:
  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_exception
        Root 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.coloradmin.cn/o/2385015.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

智慧化工园区安全风险管控平台建设方案(Word)

1 项目概况 1.1 园区概况 1.1.1 XX化工园区简况 1.1.2 企业现状 1.1.3 园区发展方向 1.1.4 园区信息化现状 1.2 项目建设背景 1.2.1 政策背景 1.3 项目建设需求分析 1.3.1 政策需求分析 1.3.2 安全生产监管需求分析 1.3.3 应急协同管理需求分析 1.3.4 工业互联网安…

【uniapp】 iosApp开发xcode原生配置项(iOS平台Capabilities配置)

如果你需要配置诸如:Access Wi-Fi Information 简单地说就是这个地址 ios平台capabilities配置 本来这种配置就是在Xcode的平台中选中即可,他们的信息会存储在XCode工程的.entitlements和Info.plist文件。 按照uniapp文档说的, HBuilderX4.…

MYSQL优化(1)

MYSQL调优强调的是如何提高MYSQL的整体性能,是一套整体方案。根据木桶原理,MYSQL的最终性能取决于系统中性能表现最差的组件。可以这样理解,即使MYSL拥有充足的内存资源,CPU资源,如果外存IO性能低下,那么系…

基于BERT预训练模型(bert_base_chinese)训练中文文本分类任务(AI老师协助编程)

新建项目 创建一个新的虚拟环境 创建新的虚拟环境(大多数时候都需要指定python的版本号才能顺利创建): conda create -n bert_classification python3.9激活虚拟环境: conda activate myenvPS:虚拟环境可以避免权限问题,并隔离…

从数据到智能:openGauss+openEuler Intelligence的RAG架构实战

随着人工智能和大规模语言模型技术的崛起,传统的搜索引擎由于其只能提供简单的关键字匹配结果,已经越来越无法满足用户对于复杂、多样化和上下文相关的知识检索需求。与此相对,RAG(Retrieval-Augmented Generation)技术…

【Linux】初见,基础指令

前言 本文将讲解Linux中最基础的东西-----指令,带大家了解一下Linux中有哪些基础指令,分别有什么作用。 本文中的指令和选项并不全,只介绍较为常用的 pwd指令 语法:pwd 功能:显示当前所在位置(路径&#xf…

什么是实时流数据?核心概念与应用场景解析

在当今数字经济时代,实时流数据正成为企业核心竞争力。金融机构需要实时风控系统在欺诈交易发生的瞬间进行拦截;电商平台需要根据用户实时行为提供个性化推荐;工业物联网需要监控设备状态预防故障。这些场景都要求系统能够“即时感知、即时分…

工业RTOS生态重构:从PLC到“端 - 边 - 云”协同调度

一、引言 在当今数字化浪潮席卷全球的背景下,工业领域正经历着深刻变革。工业自动化作为制造业发展的基石,其技术架构的演进直接关系到生产效率、产品质量以及企业的市场竞争力。传统的PLC(可编程逻辑控制器)架构虽然在工业控制领…

基于开源链动2+1模式AI智能名片S2B2C商城小程序的社群构建与新型消费迎合策略研究

摘要:随着个性化与小众化消费的崛起,消费者消费心理和模式发生巨大变化,社群构建对商家迎合新型消费特点、融入市场经济发展至关重要。开源链动21模式AI智能名片S2B2C商城小程序的出现,为社群构建提供了创新工具。本文探讨该小程序…

高性能RPC框架--Dubbo(五)

Filter: filter过滤器动态拦截请求(request)或响应(response)以转换或使用请求或响应中包含的信息。同时对于filter过滤器不仅适合消费端而且还适合服务提供端。我们可以自定义在什么情况下去使用filter过滤器 Activa…

搭建自己的语音对话系统:开源 S2S 流水线深度解析与实战

网罗开发 (小红书、快手、视频号同名) 大家好,我是 展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括iOS、前端、Harmony OS、Java、Python等…

feign调用指定服务ip端口

1 背景 在springcloud开发时候,同时修改了feign接口和调用方的代码,希望直接在某个环境调用修改的代码,而线上的服务又不希望被下线因为需要继续为其他访问页面的用户提供功能后端服务,有时候甚者包含你正在修改的功能。 2 修改…

【深尚想!爱普特APT32F1023H8S6单片机重构智能电机控制新标杆】

在智能家电与健康器械市场爆发的今天,核心驱动技术正成为产品突围的关键。传统电机控制方案面临集成度低、开发周期长、性能瓶颈三大痛点,而爱普特电子带来的APT32F1023H8S6单片机无感三合一方案,正在掀起一场智能电机控制的技术革命。 爆款基…

Unity EventCenter 消息中心的设计与实现

在开发过程中,想要传递信号和数据,就得在不同模块之间实现通信。直接通过单例调用虽然简单,但会导致代码高度耦合,难以维护。消息中心提供了一种松耦合的通信方式:发布者不需要知道谁接收事件,接收者不需要…

MySQL远程连接10060错误:防火墙端口设置指南

问题描述: 如果你通过本机服务器远程连接MySQL,出现10060错误,那可能是你的防火墙的问题 解决: 第一步:查看防火墙规则 通过以下命令查询,看ports是否开放了3306端口,目前只开放了22端口 f…

使用 OpenCV 实现 ArUco 码识别与坐标轴绘制

🎯 使用 OpenCV 实现 ArUco 码识别与坐标轴绘制(含Python源码) Aruco 是一种广泛用于机器人、增强现实(AR)和相机标定的方形标记系统。本文将带你一步一步使用 Python OpenCV 实现图像中多个 ArUco 码的检测与坐标轴…

canal实现mysql数据同步

目录 1、canal下载 2、mysql同步用户创建和授权 3、canal admin安装和启动 4、canal server安装和启动 5、java 端集成监听canal 同步的mysql数据 6、java tcp同步只是其中一种方式,还可以通过kafka、rabbitmq等方式进行数据同步 1、canal下载 canal实现mysq…

易境通专线散拼系统:全方位支持多种专线物流业务!

在全球化电商快速发展的今天,跨境电商物流已成为电商运营中极为重要的环节。为了确保物流效率、降低运输成本,越来越多的电商卖家选择专线物流服务。专线物流作为五大主要跨境电商物流模式之一,通过固定的运输路线和流程,极大提高…

06 如何定义方法,掌握有参无参,有无返回值,调用数组作为参数的方法,方法的重载

1.调用方法 2.掌握有参函数 3.调用数组作为参数 一个例题:数组参数,返回值 方法的重载 两个例题:冒泡排序和九九乘法表的格式学习

使用vscode MSVC CMake进行C++开发和Debug

使用vscode MSVC CMake进行C开发和Debug 前言软件安装安装插件构建debuug方案一debug方案二其他 前言 一般情况下我都是使用visual studio来进行c开发的,但是由于python用的是vscode,所以二者如果统一的话能稍微提高一点效率。 软件安装 需要安装的软…