EFK实战一 - 基础环境搭建

本文涉及的产品
Elasticsearch Serverless通用抵扣包,测试体验金 200元
日志服务 SLS,月写入数据量 50GB 1个月
简介: EFK实战一 - 基础环境搭建

在分布式系统中,由于节点服务会部署多台,一旦出现线上问题需要通过日志分析定位问题就需要登录服务器一台一台进行日志检索,非常不便利,这时候就需要用到EFK日志收集工具。

在应用服务端部署Filebeat,将我们打印到日志文件中的日志发送到Logstash中,在经过Logstash的解析格式化后将日志发送到ElasticSearch中,最后通过Kibana展现出来。EFK基础版的架构如下:

本文主要是使用docker和docker-Compose部署ELK的基础环境,选择7.5.1作为EFK组件版本。

当然了如果大家对 dockerdocker-compose不是很熟悉的话可以翻看我之前为大家准备的两篇文章:

实在不想使用docker部署的话也可以下载对应的安装包然后手动部署,配置方式基本一样。


安装配置


elasticsearch

安装elasticsearch之前先配置如下的系统变量

  • 修改 /etc/sysctl.conf,在最后追加如下配置vm.max_map_count = 655360
  • 修改 /etc/security/limits.conf,增加如下配置
*       soft    memlock          unlimited
*         hard    memlock          unlimited
*         hard    nofile           65536
*         soft    nofile           65536
  • 修改/etc/security/limits.d/20-nproc.conf,增加如下配置
*          soft    nproc     4096
root       soft    nproc     unlimited
  • 启动elasticsearch临时容器
    docker run --rm --name es -p9200:9200 -p9300:9300 -e discovery.type=single-node elasticsearch:7.5.1
  • 导出elasticsearch配置文件
    docker cp fbce586c8a56:/usr/share/elasticsearch/config/elasticsearch.yml /app/elk/elasticsearch/conf/elasticsearch.yml
  • 修改es配置文件
cluster.name: "elk-cluster"
network.host: 0.0.0.0
bootstrap.memory_lock: true
discovery.type: single-node
  • 建立es的日志文件夹和数据文件夹,并对文件夹授权
mkdir -p /app/elk/elasticsearch/logs
mkdir -p /app/elk/elasticsearch/data
chmod -R 777 /app/elk/elasticsearch/logs
chmod -R 777 /app/elk/elasticsearch/data
  • 停止临时容器docker stop fbce586c8a56

logstash

  • 启动临时容器
    docker run --rm --name logstash -p5044:5044 -p9600:9600 logstash:7.5.1
  • 导出docker的配置文件
    docker cp 5adb0971bb0f:/usr/share/logstash/config /app/elk/logstash
  • 建立logstash数据文件夹,并对其授权
mkdir -p /app/elk/logstash/data
chmod -R 777 /app/elk/logstash/data
  • 复制logstash启动文件,并对其修改
cd /app/elk/logstash/config
cp logstash-sample.conf logstash.conf

修改logstash.conf,配置output

# Sample Logstash configuration for creating a simple
# Beats -> Logstash -> Elasticsearch pipeline.
input {
  beats {
    port => 5044
  }
}
output {
  elasticsearch {
    hosts => ["http://172.31.0.207:9200"]
    index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
    #user => "elastic"
    #password => "changeme"
  }
}

暂时修改一下ES的访问路径即可。

  • 停止临时容器docker stop 5adb0971bb0f

kibana

  • 启动临时容器
    docker run --rm --name kibana -p5601:5601 kibana:7.5.1
  • 导出kibana配置文件
    docker cp f21f0f9e0259:/usr/share/kibana/config/kibana.yml /app/elk/kibana/conf/kibana.yml
  • 修改kibana配置
server.name: kibana
server.host: "0"
elasticsearch.hosts: [ "http://172.31.0.207:9200" ]
xpack.monitoring.ui.container.elasticsearch.enabled: true
i18n.locale: zh-CN

设置 i18n.locale: zh-CN属性后会对kibana进行汉化,这样便于操作,主要还是我英语不太好~

  • 停止临时容器docker stop f21f0f9e0259

docker-compose

经过上面的准备,我们可以编写 docker-compose文件,方便我们对容器进行编排,一键启动。有了之前的基础,我们很容易编写出对应的yml文件,编写后的内容如下:

version: "3"
services:
  elasticsearch:
    image: docker.io/elasticsearch:7.5.1
    container_name: elasticsearch
    environment:
      - "ES_JAVA_OPTS=-Xms4096m -Xmx4096m -Xmn1300m"
    volumes:
      - /app/elk/elasticsearch/conf/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
      - /app/elk/elasticsearch/data:/usr/share/elasticsearch/data:rw
      - /app/elk/elasticsearch/logs:/usr/share/elasticsearch/logs:rw
    ports:
      - "9200:9200"
      - "9300:9300"
    restart: always
  kibana:
    image: docker.io/kibana:7.5.1
    container_name: kibana
    volumes:
      - /app/elk/kibana/conf/kibana.yml:/usr/share/kibana/config/kibana.yml
    ports:
      - "5601:5601"
    depends_on:
      - elasticsearch
    restart: always
  logstash:
    image: logstash:7.5.1
    container_name: logstash
    command: logstash -f /usr/share/logstash/config/logstash.conf
    volumes:
      - /app/elk/logstash/config:/usr/share/logstash/config
      - /app/elk/logstash/data:/usr/share/logstash/data
    ports:
      - "9600:9600"
      - "5044:5044"
    depends_on:
      - elasticsearch
    restart: always

将docker-compose文件上传至服务器,启动docker服务

docker-compose -f elk.yml up -d

启动完成后访问kibana地址 http://172.31.0.207:5601/验证是否正常访问


安全认证


我们刚刚部署的elk环境是不需要密码就可以登录kibana的,这样谁都可以访问而且可以更改数据。所以我们需要给kibana加个密码,必须要登录才可以进行操作。

主要是利用elasticsearch自带的xpack作为权限验证功能。操作步骤如下:

  • 修改es外部配置文件/app/elk/elasticsearch/conf/elasticsearch.yml,开启权限验证
xpack.security.enabled: true
  • 重启 elasticsearch服务
    docker-compose -f elk.yml restart elasticsearch
  • 进入es容器,为内置账号设置密码
docker exec -it  elasticsearch /bin/bash
cd /usr/share/elasticsearch/bin
./elasticsearch-setup-passwords interactive

  • 修改kibana配置文件/app/elk/kibana/conf/kibana.yml
elasticsearch.username: "elastic"
elasticsearch.password: "xxxxxx"
  • 重启kibanadocker-compose -f elk.yml restart kibana
  • 重新访问kibana,并使用上面设置的elastic账号进行登录

至此我们顺利给ELK加上了安全认证,可以放心在生产环境部署使用了!


如果本文对你有帮助,别忘记来个三连:点赞,转发,评论咱们下期见!

收藏 等于白嫖点赞 才是真情!

相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。  
目录
相关文章
|
Linux 网络安全 Android开发
振南技术干货集:各大平台串口调试软件大赏(1)
振南技术干货集:各大平台串口调试软件大赏(1)
|
5月前
|
机器人 Java
微信自动回复机器人插件,自动同意回复消息, 微信群管理机器人,JAVA框架
本项目基于开源微信机器人框架开发,提供自动回复私聊消息、自动同意好友请求及微信群管理功能。核心功能包括:自动回复用户消息、处理好友申请(发送欢迎语并备注新好友)、群聊管理(如欢迎新成员、关键词踢人和群内自动回复)。项目依赖 `weixin-java-mp` 和 `weixin-java-cp` 核心库,并结合 Lombok 和 Guava 提升开发效率。代码结构清晰,包含配置类 `WechatBotConfig` 初始化服务实例,以及多个处理器实现具体逻辑。下载地址:https://www.pan38.com/share.php?code=r4HGg,提取码:8888(仅供学习参考)。
|
存储 机器学习/深度学习 传感器
商业日志分析工具
【10月更文挑战第20天】
282 5
|
新零售 供应链 算法
商品生命周期管理:新品打爆、爆品常青的必备利器
商品生命周期管理:新品打爆、爆品常青的必备利器
1560 0
银河麒麟桌面操作系统中获取硬盘序列号
银河麒麟桌面操作系统中获取硬盘序列号
|
消息中间件 Java 关系型数据库
【二十】springboot整合ElasticSearch实战(万字篇)
【二十】springboot整合ElasticSearch实战(万字篇)
3411 47
|
Java 中间件 API
【分布式技术专题】「Zookeeper中间件」给大家学习一下Zookeeper的”开发伴侣”—Curator-Framework(基础篇)
【分布式技术专题】「Zookeeper中间件」给大家学习一下Zookeeper的”开发伴侣”—Curator-Framework(基础篇)
722 92
【分布式技术专题】「Zookeeper中间件」给大家学习一下Zookeeper的”开发伴侣”—Curator-Framework(基础篇)
|
负载均衡 关系型数据库 MySQL
MySQL Router读写节点支持负载均衡策略
`routing_strategy`是MySQL Router配置选项,用于设定数据路由策略。可选值包括:`first-available`, `next-available`, `round-robin`和`round-robin-with-fallback`,分别对应不同的负载均衡和故障转移策略。更多详情参考:<https://dev.mysql.com/doc/mysql-router/8.0/en/mysql-router-conf-options.html#option_mysqlrouter_routing_strategy>。
280 1
|
存储 Oracle 关系型数据库
Oracle数据泵:数据迁移的魔法棒
【4月更文挑战第19天】Oracle数据泵是高效的数据迁移工具,提供并行处理、灵活数据过滤、完整数据保留及详细日志记录等功能。相比传统工具,数据泵在性能和易用性上更具优势,能大幅缩短迁移时间,降低业务中断风险。通过掌握其使用技巧,数据管理员可以充分利用数据泵,提升数据管理效率。
|
人工智能 文字识别 小程序
通义听悟--一个懂你的AI助理
介绍什么是通义听悟以及通义听悟的功能体验
16397 68