随笔 - 16  文章 - 0  评论 - 3  阅读 - 19451 

1.ELK概括

ELK 是一个流行的开源日志管理和分析平台,广泛用于收集、存储、搜索和可视化日志数据。它的名字来源于三个核心组件的首字母缩写:ElasticsearchLogstashKibana


1. ELK 的核心组件

(1) Elasticsearch

  • 功能:分布式搜索引擎,负责存储和索引数据。
  • 特点
    • 基于 Apache Lucene 构建,提供强大的全文搜索能力。
    • 支持分布式架构,可以处理大规模数据集。
    • 提供 RESTful API 接口,便于集成到各种应用中。
  • 用途
    • 存储从 Logstash 或其他来源接收的数据。
    • 提供快速的查询和数据分析能力。

(2) Logstash

  • 功能:数据采集和处理管道,负责从各种来源收集数据,并将其转换为适合 Elasticsearch 的格式。
  • 特点
    • 支持多种输入(如文件、网络、数据库等)。
    • 提供丰富的过滤器插件(如解析 JSON、正则表达式、日期处理等)。
    • 支持多种输出目标(如 Elasticsearch、Kafka、Redis 等)。
  • 用途
    • 作为中间层,负责日志数据的收集、清洗和传输。

(3) Kibana

  • 功能:可视化工具,用于展示 Elasticsearch 中的数据。
  • 特点
    • 提供直观的界面,支持创建仪表盘、图表和报告。
    • 支持复杂的查询和过滤操作。
    • 可以与 Elasticsearch 实时交互,动态生成可视化内容。
  • 用途
    • 将日志数据转化为易于理解的图表和报告。
    • 提供实时监控和告警功能。

3. ELK 的工作流程

  1. 数据采集

    • 使用 Filebeat、Logstash 或其他工具从各种来源(如服务器日志、应用程序日志、数据库等)收集数据。
  2. 数据处理

    • Logstash 对数据进行解析、过滤和转换,使其符合 Elasticsearch 的存储格式。
  3. 数据存储

    • 处理后的数据被存储到 Elasticsearch 中,构建索引以便快速查询。
  4. 数据可视化

    • 使用 Kibana 创建仪表盘和图表,帮助用户分析和监控数据。

4. ELK 的应用场景

(1) 日志管理

  • 集中化管理来自多个系统的日志数据。
  • 快速定位问题日志,提升故障排查效率。

(2) 性能监控

  • 监控服务器和应用程序的性能指标(如 CPU、内存、响应时间等)。
  • 通过可视化工具实时了解系统状态。

(3) 安全分析

  • 分析安全事件日志,检测潜在威胁。
  • 结合规则引擎实现自动化的安全告警。

(4) 数据分析

  • 对业务数据进行深度分析,提取有价值的信息。
  • 支持多维度查询和统计。

5. ELK 的优势

  • 开源免费:所有组件均为开源软件,社区活跃,扩展性强。
  • 灵活扩展:支持水平扩展,能够处理海量数据。
  • 强大的生态系统:拥有丰富的插件和工具,满足不同场景需求。
  • 易用性:通过 Kibana 提供友好的可视化界面,降低使用门槛。

6. ELK 的局限性

  • 资源消耗较高:尤其是 Elasticsearch,在处理大规模数据时需要较高的硬件配置。
  • 复杂性:对于初学者来说,部署和配置可能有一定难度。
  • 维护成本:需要定期优化索引、清理数据以保持性能。

7. 总结

ELK 是一个功能强大且灵活的日志管理和分析平台,适用于各种规模的企业和项目。通过结合 Elasticsearch、Logstash 和 Kibana,它可以实现从数据采集到可视化的全流程处理,帮助企业更好地理解和利用数据。

2.准备工作

安装ES,Logstash ,Kibana

2.1 自定义桥接网络

考虑到ES容器和Kibana容器需要网络互通,这里先创建一个桥接网络。

docker network create elk-net

2.2 docker安装ES

2.2.1 拉取ES镜像

docker pull elasticsearch:7.13.4

2.2.2运行ES容器

运行前先把相关挂载目录建立了

目录的建立不一定要一样啊,看自己想挂载在哪个目录。
image

启动ES容器

docker run -d \
--name elasticsearch \
-p 9200:9200 \
-p 9300:9300 \
-e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
-e "discovery.type=single-node" \
-e "http.host=0.0.0.0" \
-v /soft/es/data:/usr/share/elasticsearch/data \
-v /soft/es/plugins:/usr/share/elasticsearch/plugins \
-v /soft/es/logs:/usr/share/elasticsearch/logs \
--privileged \
--network elk-net \
elasticsearch:7.13.4

参数说明

  • -d:以后台模式运行容器。
  • --name elasticsearch:为容器指定名称。
  • -p 9200:9200:将主机的 9200 端口映射到容器的 9200 端口(HTTP API 接口)。
  • -p 9300:9300:将主机的 9300 端口映射到容器的 9300 端口(节点间通信端口,适用于集群模式)。
  • -e "ES_JAVA_OPTS=-Xms512m -Xmx512m":设置 Elasticsearch 的 JVM 堆内存大小为 512MB(可根据需求调整)。
  • -e "discovery.type=single-node":配置为单节点模式,适用于开发或测试环境。
  • -e "http.host=0.0.0.0":允许 Elasticsearch 监听所有网络接口上的请求。
  • -v /soft/es/data:/usr/share/elasticsearch/data:将主机的 ./es-data 目录挂载到容器的数据目录,用于持久化存储数据。
  • -v /soft/es/plugins:/usr/share/elasticsearch/plugins:将主机的 ./es-plugins 目录挂载到容器的插件目录,用于存放自定义插件。
  • -v /soft/es/logs:/usr/share/elasticsearch/logs:将主机的 ./es-logs 目录挂载到容器的日志目录,用于持久化存储日志文件。
  • --privileged:赋予容器更高的权限,避免因权限不足导致的问题。
  • --network elk-net:将容器连接到名为 elk-net 的 Docker 网络,便于与其他容器通信。
  • elasticsearch:7.13.4:使用的 Elasticsearch 镜像版本

2.2.3 测试ES运行情况

2.2.3.1 查看ES容器是否正常运行

docker ps -a

image

我这可以看到没有正常运行,那么就需要找下运行失败的原因

# 查询容器日志 docker logs <container_id_or_name> 
docker logs elasticsearch

看日志使权限问题,没权限往logs目录下写文件。我这直接放开logs目录和其他两个挂载目录的权限了

chmod 777 /soft/es/logs/
chmod 777 /soft/es/plugins/
chmod 777 /soft/es/data/

权限放开之后,重新启动容器

docker restart elasticsearch

image
发现启动成功,我们可以访问下es试试,访问发现没问题。
image

 curl -X GET http://127.0.0.1:9200/

image

2.3 docker安装Kibana

2.3.1 拉取Kibana的镜像

docker pull kibana:7.13.4

2.3.2 运行Kibana容器

docker run -d \
--name kibana \
-e ELASTICSEARCH_HOSTS=http://elasticsearch:9200 \
--network=elk-net \
-p 5601:5601 \
kibana:7.13.4

参数说明:

  • -d:以后台模式运行容器。
  • --name kibana:为容器指定名称为 kibana
  • -e ELASTICSEARCH_HOSTS=http://elasticsearch:9200:设置环境变量,指定 Kibana 连接的 Elasticsearch 地址为 http://elasticsearch:9200
  • --network=elk-net:将容器连接到名为 elk-net 的 Docker 网络,确保 Kibana 和 Elasticsearch 可以通过网络通信。
  • -p 5601:5601:将主机的 5601 端口映射到容器的 5601 端口,用于访问 Kibana 的 Web 界面。
  • kibana:7.13.4:使用的 Kibana 镜像版本为 7.13.4,需确保与 Elasticsearch 版本匹配。

2.3.3 查询Kibana的运行情况

image

浏览器访问:http://主机ip:5601/
image

2.4 docker安装Logstash

2.4.1.拉取Logstash镜像

docker pull logstash:7.13.4

2.4.2 启动Logstash容器

启动容器,创建挂载目录
# 启动容器
docker run -d --name=logstash logstash:7.13.4

# 主机创建文件夹,用于挂载logstash容器的文件
mkdir /soft/logstash/logstash/config

# 复制容器logstash的配置文件出来
docker cp logstash:/usr/share/logstash/config/logstash.yml /soft/logstash/logstash/config/logstash.yml
编辑logstash.yml
http.host: "0.0.0.0"
#根据实际修改es的ip:port
xpack.monitoring.elasticsearch.hosts: [ "http://elasticsearch:9200" ]
# 主管道的Logstash配置路径,如果指定目录或通配符,配置文件将按字母顺序从目录中读取
# path.config: /usr/share/logstash/config/*.conf
path.config: /usr/share/logstash/config/logstash.conf
#Logstash将其日志写到的目录
path.logs: /usr/share/logstash/logs
创建配置文件 logstash.conf

在刚才的config目录下建一个conf文件

vim /soft/logstash/logstash/config/logstash.conf
# Logstash.conf 配置文件示例  
input {
# 读取文件数据
  file {
    #采集点(注意,由于是docker启动的logstash,这里是容器内的文件,如果要采集外面主机的日志,那么文件的路径一定要挂载正确,docker启动的时候挂载下路径就好)
    path => ["/usr/share/logstash/logFile/*.log"]
    #从文件的开头开始读取,也可以选择'end'从文件末尾开始读取
    start_position => "beginning"
    #扫描间隔时间,默认是1s,建议5s
    stat_interval => "5"
    
    # sincedb文件路径,用于记录读取位置,确保在Logstash重启后不会重复读取数据,
    # 该路径必须指定到文件不能指定到文件的目录 ,不指定会默认创建
    # sincedb_path => "/usr/share/logstash/file/sincedb.txt" 
    
    # 利用linux黑洞可以达到每次重头读取日志文件
    sincedb_path => "/dev/null"
  }
}

output {
  elasticsearch {
  #集群的话,直接添加多个url
    hosts => ["elasticsearch:9200"]
    #es的用户名和密码(无密码则不需要)
    #user =>"elastic"
    #password =>"elastic"
    #建立的索引以日期区分
    index => "logstash-log-%{+YYYY.MM.dd}"
 }
 #在控制台输出logstash的日志
 stdout { codec=> rubydebug }
}

启动容器
docker run -d \
--name logstash \
-p 9600:9600 \
-p 5044:5044 \
--network elk-net \
-v /soft/logstash/logstash/config/logstash.yml:/usr/share/logstash/config/logstash.yml \
-v /soft/logstash/logstash/config/logstash.conf:/usr/share/logstash/config/logstash.conf \
-v /soft/logstash/logstash/config/logFile:/usr/share/logstash/logFile \
logstash:7.13.4
  • -d:以后台模式运行容器。
  • --name logstash:为容器指定名称为 logstash
  • -p 9600:9600:将主机的 9600 端口映射到容器的 9600 端口,用于访问 Logstash 的监控接口。
  • -p 5044:5044:将主机的 5044 端口映射到容器的 5044 端口,用于接收 Filebeat 或其他 Beats 工具发送的数据。
  • --network elk-net:将容器连接到名为 elk-net 的 Docker 网络,确保 Logstash 和 Elasticsearch 可以通过网络通信。
  • -v /soft/logstash/logstash/config/logstash.yml:/usr/share/logstash/config/logstash.yml:将主机路径 /soft/logstash/logstash/config/logstash.yml 挂载到容器内的 /usr/share/logstash/config/logstash.yml,用于加载 Logstash 的全局配置文件。
  • -v /soft/logstash/logstash/config/logstash.conf:/usr/share/logstash/config/logstash.conf:将主机路径 /soft/logstash/logstash/config/logstash.conf 挂载到容器内的 /usr/share/logstash/config/logstash.conf,用于定义 Logstash 的数据处理管道配置。
  • -v /soft/logstash/logstash/config/logFile:/usr/share/logstash/logFile:将主机路径 /soft/logstash/logstash/config/logFile 挂载到容器内的 /usr/share/logstash/logFile,用于存储日志文件或其他需要持久化的数据。
  • logstash:7.13.4:使用的 Logstash 镜像版本为 7.13.4,需确保与 Elasticsearch 和 Kibana 的版本匹配。
查看启动日志
docker logs logstash

image

2.4.3 测试logstash

在 /soft/logstash/logstash/config/logFile目录下建一个a.log,随便往里面写点东西

image

查看logstash日志,发现有日志打印出来了

docker logs logstash

image

3. kibana查询日志

查看logstash的索引是否成功建立
get /_cat/indices

image

去Overview中创建索引模式

image

image

image

image

image

创建完成之后去discover查看日志

image

image

参考:

基于Docker搭建ELK(Elasticsearch、Logstash、Kibana)日志框架_docker搭建kibana+elasticsearch+logstash+filebeat-CSDN博客

Docker 上安装部署 Elasticsearch(ES)详细教程 - SHENHUANJIE - 博客园

posted on   旅途的痕迹  阅读(74)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示