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

ELK部署

背景

很多公司还是在单体项目中苦苦挣扎,没有必要上elk系统,大家都懂的一个原则系统的技术栈越多系统越复杂,维护起来也越麻烦,在没有大流量高并发的情况下我们就用单体服务挺舒服。我们行业的特殊性做的都是BTB的项目,并发更是少的可怜,唯一出问题的可能性就是联表太多效率低了下来,做的和erp系统一样的臃肿。在追求微服务多节点部署的情况下这时就有必要使用ELK系统去查问题的可能性。不同服务之间的业务调用日志打印在不同目录下,这样就提高的查问题的效率,同时也提高了日志分析的方便性提高了效率。

我用的版本都是 6.7.2 很久之前pull下来的镜像,现在镜像加速好像失效了,去找个加速换下重启就能用了 需要尝试,不知道什么时候就又失效了

logstash             7.6.2     fa5b3b1e9757   4 years ago   813MB
kibana               7.6.2     f70986bc5191   4 years ago   1.01GB
elasticsearch        7.6.2     f29a1ee41030   4 years ago   791MB

大家可以看到是4年前pull的版本了

docker镜像加速

在linux系统上看下是否在目录下存在文件

[root@localhost ~]# cat /etc/docker/daemon.json
{"registry-mirrors": ["https://qoe0omj6.mirror.aliyuncs.com"]
}

有修改registry-mirrors  可以多添加几个,有能使用的我这个是不能使用。

然后重启docker 验证能否pull镜像

[root@localhost ~]# systemctl daemon-reload
[root@localhost ~]# systemctl restart docker

docker获取镜像

[root@localhost ~]# docker pull elasticsearch   不加版本默认最新版本
[root@localhost ~]# docker pull elasticsearch:6.7.2  指定下载最新版本   

其他两组件也是这样获取,注意使用版本一致的中间件不然会有兼容的问题

镜像启动

elasticsearch启动

mkdir -p /home/elasticsearch/config    创建文件夹后面启动容器使用mkdir -p /home/elasticsearch/dataecho "http.host: 0.0.0.0" >/home/elasticsearch/config/elasticsearch.yml   创建配置文件写入 可以用标准的配置文件  现在简单创建写下docker run -p 9200:9200 -p 9300:9300 --name elasticsearch \
-e "discovery.type=single-node" \
-e "cluster.name=elasticsearch" \
-v /home/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /home/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
-v /home/elasticsearch/data:/usr/share/elasticsearch/data \
-d elasticsearch:7.6.2

-p: 选项用于将容器的端口映射到主机的端口。

--name elasticsearch:  这为容器指定了一个名称(elasticsearch),便于后续管理和访问。您可以使用这个名称来停止、启动或删除容器。

-e: 选项用于设置环境变量

-v 选项用于挂载卷,将主机目录或文件挂载到容器内。

-d: 该选项表示以分离模式(detached mode)运行容器,即在后台运行容器,而不是在前台显示容器的日志。

-p 9200:9200 -p 9300:9300

9200 是 Elasticsearch 的 HTTP 端口,通常用于发送 REST 请求。
9300 是 Elasticsearch 的传输端口,通常用于节点间的通信。

这行命令将容器的 9200 和 9300 端口分别映射到主机的 9200 和 9300 端口。
       

-e "discovery.type=single-node" 设置 discovery.type 为 single-node,指示 Elasticsearch 以单节点模式运行,适合开发和测试环境。

-e "cluster.name=elasticsearch": 这一行设置了集群的名称为 elasticsearch。集群名称用于标识和管理多个节点的集群。

elasticsearch:7.6.2:这是要运行的 Docker 镜像的名称和标签。这里指定使用 elasticsearch 镜像的 7.6.2 版本。

直接ip:9200 如果出现页面部署成功

kibana启动

创建配置文件

vi /home/kibana/config/kibana.yml配置文件内容server.name: kibana
server.host: "0"
#elasticsearch.hosts: [ "http://elasticsearch:9200" ]
elasticsearch.hosts: [ "http://elasticsearch的IP:9200" ]
xpack.monitoring.ui.container.elasticsearch.enabled: true
#设置kibana中文显示
i18n.locale: zh-CN

启动kibana

docker run --name kibana -p 5601:5601 \
-v /home/kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml \
-d kibana:7.6.2

 直接ip:5601 如果出现页面部署成功

logstash启动

创建些目录

mkdir -p /home/logstash/conf.d
mkdir -p /home/logstash/config
mkdir -p /home/logstash/logs在config下创建logstash.yml配置内容
http.host: "0.0.0.0"
xpack.monitoring.enabled: true
xpack.monitoring.elasticsearch.hosts: "http://192.168.42.117:9200" # es地址
path.config: /usr/share/logstash/config/conf.d/*.conf
path.logs: /usr/share/logstash/logs可能出现的问题
xpack.monitoring.elasticsearch.hosts: "http://127.0.0.1:9200" # es地址 能是虚拟机配置问题我需要用本机ip才能访问  用http://127.0.0.1 本地不能访问到 es/home/logstash/conf.d 目录下的文件 *.conf 配置的是服务日志传给logstash的一些配置input{tcp {mode => "server"host => "0.0.0.0"port => 4560 # 这个端口随意,要配置到springboot项目中codec => json_lines}
}
output{elasticsearch{hosts=>["192.168.42.117:9200"]index => "gzllogstash-%{+YYYY.MM.dd}"}stdout { codec=> rubydebug }
}我用到的文件名字是log_to_es.conf  这个文件的内容就是上面的配置

启动

docker run -p 9600:9600 -p 4560:4560 --name=logstash \--restart=always --privileged=true\-e ES_JAVA_OPTS="-Xms1g -Xmx2g" \-v /home/logstash/config/logstash.yml:/usr/share/logstash/config/logstash.yml \-v /home/logstash/conf.d:/usr/share/logstash/config/conf.d \-v /home/logstash/logs:/usr/share/logstash/logs  \-d logstash:7.6.2

springboot 传日志到logstash

添加依赖 注意选择对应springboot的版本

<dependency><groupId>net.logstash.logback</groupId><artifactId>logstash-logback-encoder</artifactId><version>6.6</version>
</dependency>

配置logback-spring.xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- 日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出 -->
<!-- scan:当此属性设置为true时,配置文档如果发生改变,将会被重新加载,默认值为true -->
<!-- scanPeriod:设置监测配置文档是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。 -->
<!-- debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->
<configuration scan="true" scanPeriod="30 seconds"><!--  彩色日志依赖  --><conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/><conversionRule conversionWord="wex"converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/><conversionRule conversionWord="wEx"converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/><!--  日志文件储存地址, 通过application配置文件传入  --><!--    <springProperty scope="context" name="LOG_PATH" source="logback.logDir" />--><!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径--><property name="LOG_PATH" value="./logs"/><springProperty scope="context" name="appName" source="spring.application.name"/><!--  控制台彩色日志格式  --><property name="CONSOLE_LOG_PATTERN"value="${CONSOLE_LOG_PATTERN:-%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/><!--  日志文件日志格式  --><property name="FILE_LOG_PATTERN"value="${FILE_LOG_PATTERN:-%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%15t] %-40.40logger{39} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/><!-- 控制台输出 --><appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><pattern>${CONSOLE_LOG_PATTERN}</pattern><charset>UTF-8</charset></encoder><filter class="ch.qos.logback.classic.filter.LevelFilter"><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter></appender><!-- 按照每天及大小生成日志文件 --><appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><!--日志文件输出的文件名--><FileNamePattern>${LOG_PATH}/${appName}.%d{yyyy-MM-dd}.%i.log</FileNamePattern><!--日志文件最大大小--><maxFileSize>100MB</maxFileSize><!--日志文件保留天数--><maxHistory>30</maxHistory></rollingPolicy><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><pattern>${FILE_LOG_PATTERN}</pattern><charset>UTF-8</charset></encoder><!-- 过滤级别,如果想分类生成日志文件的话(分成debug、info、error等三个日志文件, 每个文件只记录自己级别的日志),1. 直接把这个 <appender> 复制三分改一下 FileNamePattern 和 name.2. 把 <filter> 注释去掉改一下 level 就可以了--><!--        <filter class="ch.qos.logback.classic.filter.LevelFilter">--><!--            <level>info</level>--><!--            <onMatch>ACCEPT</onMatch>--><!--            <onMismatch>DENY</onMismatch>--><!--        </filter>--></appender><!--输出到 logstash的 appender--><appender name="logstash" class="net.logstash.logback.appender.LogstashTcpSocketAppender"><!--远程logstash ip:port,port应该是logstash默认为4560,你启动的是配置的端口 配置文件中的端口--><destination>192.168.42.117:4560</destination><encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"/></appender><!--配置异步日志--><appender name="FILE_ASYNC" class="ch.qos.logback.classic.AsyncAppender"><!--不丢失日志,默认的,如果队列的80%已满 则会丢弃TRACT,DEBUG,INFO级别的日志--><discardingThreshold>0</discardingThreshold><!--更改默认的队列的深度,改值会影响性能,默认值是256--><queueSize>512</queueSize><!--添加附加的appender,最多只能添加一个--><appender-ref ref="FILE"/></appender><!-- 日志输出级别如果使用springProfile, 就需要在application配置文件中通过 spring.profiles.active=dev 来指定环境,也可以直接去掉 <springProfile> 这个标签或者把它整个注释掉--><springProfile name="gzl,prod"><root level="INFO"><appender-ref ref="CONSOLE"/><appender-ref ref="FILE"/><appender-ref ref="logstash"/></root><!--项目包的路径--><logger name="com.gzl.gateway" level="INFO" additivity="false"><appender-ref ref="CONSOLE"/><appender-ref ref="FILE"/><appender-ref ref="logstash"/></logger><!--包--><!--<logger name="com.gzl.base.mapper" level="OFF"></logger>--><!--类--><!--<logger name="com.gzl.base.mapper.UserMapper." level="OFF"></logger>--><!--方法--><!--<logger name="com.gzl.base.controller.UserController.selectUserRoleAuthority" level="OFF"></logger>--><!--不打印某个类下的日志--><!--        <logger name="com.gzl.base.mapper.ProductInfoMapper" level="OFF"/>--></springProfile></configuration>

配置文件和正常的日志文件一样注意添加logstash相关的关键在于

   <!--输出到 logstash的 appender--><appender name="logstash" class="net.logstash.logback.appender.LogstashTcpSocketAppender"><!--远程logstash ip:port,port应该是logstash默认为4560,你启动的是配置的端口 配置文件中的端口--><destination>192.168.42.117:4560</destination><encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"/></appender>

后面还会更新配置输出日志的格式内容等问题

验证下是否日志传到logstash中了

 docker logs -fn 1000 logstash

你能看到传过去的日志新写

相关文章:

ELK部署

背景 很多公司还是在单体项目中苦苦挣扎&#xff0c;没有必要上elk系统&#xff0c;大家都懂的一个原则系统的技术栈越多系统越复杂&#xff0c;维护起来也越麻烦&#xff0c;在没有大流量高并发的情况下我们就用单体服务挺舒服。我们行业的特殊性做的都是BTB的项目&#xff0…...

ELK系列-(四)轻量级的日志收集助手-Beat家族

一、前文回顾 ELK系列-&#xff08;一&#xff09;Docker部署ELK核心组件 ELK系列-&#xff08;二&#xff09;LogStash数据处理的瑞士军刀 ELK系列-&#xff08;三&#xff09;Kibana 数据可视化的艺术家 关于部署的整体架构欢迎大家回到前面的文章观看&#xff0c;此处&a…...

NodeJs-包管理工具

包英文单词是 package &#xff0c;代表了一组特定功能的源码集合 管理包的应用软件&#xff0c;可以对包进行 下载安装 &#xff0c; 更新 &#xff0c; 删除 &#xff0c; 上传 等操作 借助包管理工具&#xff0c;可以快速开发项目&#xff0c;提升开发效率 前端常用的包管理…...

AWR microwave office 仿真学习(二)使用多层结构天线/超表面的S参数确定层间距

引言 如果大家有看过一些多层天线或超表面的论文,有两种比较常用的分析方法,等效电路法和传输线分析法,这两种方法都是三维结构的电磁问题转换为二维/集总的电路问题。本文就介绍根据这种思想进行多层结构优化的一种方法:在AWR软件中根据单层结构的S参数,确定最佳层间距。…...

【zlm】 webrtc源码讲解三(总结)

目录 setsdp onwrite ​编辑 play 参考 setsdp onwrite play 参考 【zlm】 webrtc源码讲解_zlm webrtc-CSDN博客 【zlm】 webrtc源码讲解&#xff08;二&#xff09;_webrtc 源码-CSDN博客...

Springboot+Druid(可切换Hikari)+Mybatis-plus+mysql+hive的多数据源项目配置

1.搭建一个springboot项目&#xff0c;不会的搜一下&#xff0c;很简单这里不做赘述。 2.首先你搭建的springboot能正常启动之后&#xff0c;pom文件添加如下依赖&#xff1a; <dependency><groupId>com.alibaba</groupId><artifactId>druid</arti…...

Git使用步骤

Git 是一个分布式版本控制系统&#xff0c;广泛用于软件开发和其他需要跟踪文件变更的项目。以下是 Git 的基本使用方法和一些常用命令的详细说明。 安装 Git 在大多数操作系统上&#xff0c;你可以通过包管理器安装 Git&#xff1a; Windows: 下载并安装 Git for Windows。…...

Python+OpenCV系列:AI看图识人、识车、识万物

在人工智能风靡全球的今天&#xff0c;用 Python 和 OpenCV 结合机器学习实现物体识别&#xff0c;不仅是酷炫技能&#xff0c;更是掌握未来的敲门砖。本篇博文手把手教你如何通过摄像头或图片输入&#xff0c;识别人、动物、车辆及其他物品&#xff0c;让你的程序瞬间具备 AI …...

springboot449教学资源共享平台(论文+源码)_kaic

摘 要 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一些老技术的弊端问题。因为传统教学资源共享平台信息管理难度大&#xff0c;容错率低&am…...

类OCSP靶场-Kioptrix系列-Kioptrix Level 4

一、前情提要 二、实战打靶 1. 信息收集 1.1. 主机发现 1.2. 端口扫描 1.3.目录遍历 1.4. 敏感信息 2.漏洞发现 2.1.登录框万能密码 2.2.系统用户密码-ssh链接 2.3.mysql-udf提权 一、前情提要 kali黑客-利用searchsploit搜索exp一键化攻击-CSDN博客 一篇文章带你理…...

贪心算法在背包问题上的运用(Python)

背包问题 有n个物品,它们有各自的体积和价值,现有给定容量的背包,如何让背包里装入的物品具有最大的价值总和? 这就是典型的背包问题(又称为0-1背包问题),也是具体的、没有经过任何延伸的背包问题模型。 背包问题的传统求解方法较为复杂,现定义有一个可以载重为8kg的背…...

POD 存储、PV、PVC

目录 容器如何持久化存储&#xff1f; PV和PVC 为什么不能直接在 Pod 或容器中存储数据&#xff1f; 什么是 PV和 PVC&#xff1f; 可以使用本地磁盘空间创建PV吗&#xff1f; 如何让客户端通过ftp上传到远端服务器的POD里面&#xff1f; 另一个POD想访问ftp的POD里面的…...

C中strlen和sizeof的区别

1、代码如下&#xff1a; #include<stdio.h>int main() {char a[10] { h,e,l,l,0};printf("%d\n",strlen(a));printf("%d\n", sizeof(a));return 0; } 2、运行结果如下&#xff1a;...

WSL2内部的Ubuntu怎么设置网络内桥接模式,弄了好久老是不成功,怎么办?

环境: Win10专业版 WSL2 Ubuntu22.04 问题描述: WSL2内部的Ubuntu怎么设置网络内桥接模式 解决方案: 方法一 1.控制面板开启,Hyper-V 管理器 2.重启电脑 3…创建外部虚拟交换机 打开 Hyper-V 管理器,在右侧操作面板中点击“虚拟交换机管理器”。 选择“创建虚…...

Linux环境下 搭建ELk项目 -单机版练习

前言 ELK 项目是一个由三个开源工具组成的日志处理和分析解决方案&#xff0c;ELK 是 Elasticsearch、Logstash 和 Kibana 的首字母缩写。这个项目的目标是帮助用户采集、存储、搜索和可视化大量的日志和事件数据&#xff0c;尤其是在分布式系统中。下面是每个组件的概述&…...

ubuntu20.04安装mysql5.7

安装之前要确保之前没安装过或者安装后卸载干净了&#xff0c;不然后面的配置文件可能会报错。 1. 下载安装包 打开链接 downloads.mysql.com/archives/co… 选择相应版本进行下载&#xff0c;这里mysql版本选择 5.7.35&#xff0c;系统选择Ubuntu Linux&#xff0c;选择64位…...

MacPorts 安装 Tengine

创建 Portfile 以下是我参考 nginx 调整后的 Portfile&#xff0c;如需安装指定版本&#xff0c;除了修改版本号之外还需要修改 checksums 里的 sha256 sha256 值需下载 Tengine 源码文件&#xff08;tar.gz&#xff09;进行计算 模块的调整在最后的 configure.args-append …...

Git安装及基础学习

Git学习 Git安装 概述&#xff1a; Git是一个开源的分布式版本控制系统&#xff0c;可以有效、高速的处理 从很小到非常大的项目版本管理&#xff0c;是目前使用范围最广的版本 管理工具。 下载安装&#xff1a; 下载地址&#xff1a;https://git-scm.com/ 下载后傻瓜式一键安…...

【celery】任务有时候不执行

celery任务有时执行&#xff0c;有时不执行&#xff0c;这种情况是任务被冒领&#xff1b;有时执行说明这个方法可以使用&#xff0c;有时不执行通常是被使用同一个消息队列的进程冒领了&#xff1b; 解决 Redis&#xff1a;指定一个分块就行了...

【恶意软件检测论文】通过提取 API 语义来实现的一个新颖的安卓恶意软件检测方法

目录 摘要1. 引言2. 相关工作2.1. 基于重新训练的恶意软件检测2.2. 基于应用关系图的恶意软件检测2.3. 基于异常样本识别的恶意软件检测2.4. 基于API聚类的恶意软件检测 3. AMDASE概述4. 基于语义距离的API聚类4.1. API特征提取4.2. API句子生成4.3. API句子编码4.4.聚类中心生…...

《Java 100 天进阶之路》第23篇:缓冲区数据结构 ByteBuffer

第23篇&#xff1a;缓冲区数据结构 ByteBuffer &#x1f4cc; 系列导航&#xff1a;《Java 100 天进阶之路》完整目录 | ⬅️ 上一篇&#xff1a;第22篇&#xff1a;Java字符串简介 | ➡️ 下一篇&#xff1a;第24篇&#xff1a;Java枚举类型 enum 用法&#x1f448; 待发布 一…...

终极指南:5分钟掌握STL到STEP格式转换,打破3D设计与制造的数据壁垒

终极指南&#xff1a;5分钟掌握STL到STEP格式转换&#xff0c;打破3D设计与制造的数据壁垒 【免费下载链接】stltostp Convert stl files to STEP brep files 项目地址: https://gitcode.com/gh_mirrors/st/stltostp 在当今数字化制造与3D设计领域&#xff0c;STL到STEP…...

如何5分钟完成专业电路图:Draw.io ECE插件完全指南

如何5分钟完成专业电路图&#xff1a;Draw.io ECE插件完全指南 【免费下载链接】Draw-io-ECE Custom-made draw.io-shapes - in the form of an importable library - for drawing circuits and conceptual drawings in draw.io. 项目地址: https://gitcode.com/gh_mirrors/d…...

Spring AI完整学习路线:从Java开发到AI Agent的进阶之路(附15篇实战教程)

&#x1f525; Java开发者必看&#xff01;Spring AI完整学习路线&#xff1a;从CRUD到AI Agent的蜕变之路&#xff08;2026终极指南&#xff09; 作者&#xff1a;12年OTA公司资深程序员 技术栈&#xff1a;Spring Boot 3.5.9 Spring AI 1.1.4 Reactor 多模型集成 阅读时间…...

Linux服务器安全加固第一步:用好chattr隐藏权限和umask默认值

Linux服务器安全加固实战&#xff1a;chattr与umask的防御艺术 当一台裸机Linux服务器首次上线时&#xff0c;大多数管理员会立即部署防火墙、更新补丁和配置SSH密钥登录——这些确实是安全基础。但真正经历过服务器入侵事件的老手都知道&#xff0c;攻击者往往从最不起眼的文件…...

如何快速掌握明日方舟自动化助手:5大核心功能告别重复操作

如何快速掌握明日方舟自动化助手&#xff1a;5大核心功能告别重复操作 【免费下载链接】MaaAssistantArknights 《明日方舟》小助手&#xff0c;全日常一键长草&#xff01;| A one-click tool for the daily tasks of Arknights, supporting all clients. 项目地址: https:/…...

杰理之开混合录音插设备播放不了【篇】

...

Allegro PCB设计避坑:用Shape Keepout巧妙隔离大小电流GND(附16.6实操步骤)

Allegro PCB设计中的地平面隔离艺术&#xff1a;用Shape Keepout实现电流路径优化 在高速PCB设计中&#xff0c;地平面的处理往往决定着整个系统的成败。当大电流地与小信号地不得不共享同一网络名称时&#xff0c;如何在不违反设计规则的前提下实现物理隔离&#xff1f;这个问…...

监听bean在容器中注入情况

直接上代码&#xff0c;原理就是 通过环境监听器/*** 调试监听器* author shadow*/ public class DebugListener {Autowiredprivate ApplicationContext applicationContext;EventListener(ApplicationReadyEvent.class)public void onApplicationReady() {System.out.println(…...

水凝膜、钢化膜、护景贴大对决:一张表看懂该买谁

水凝膜、钢化膜、护景贴大对决&#xff1a;一张表看懂该买谁手机屏幕保护膜主要有三种&#xff1a;水凝膜、普通钢化膜和护景贴&#xff08;悟赫德为代表&#xff09;。很多人不知道它们到底有什么区别&#xff0c;我们从六个维度给你讲清楚。材料结构。水凝膜是单层软塑料&…...