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部署
背景 很多公司还是在单体项目中苦苦挣扎,没有必要上elk系统,大家都懂的一个原则系统的技术栈越多系统越复杂,维护起来也越麻烦,在没有大流量高并发的情况下我们就用单体服务挺舒服。我们行业的特殊性做的都是BTB的项目࿰…...
ELK系列-(四)轻量级的日志收集助手-Beat家族
一、前文回顾 ELK系列-(一)Docker部署ELK核心组件 ELK系列-(二)LogStash数据处理的瑞士军刀 ELK系列-(三)Kibana 数据可视化的艺术家 关于部署的整体架构欢迎大家回到前面的文章观看,此处&a…...
NodeJs-包管理工具
包英文单词是 package ,代表了一组特定功能的源码集合 管理包的应用软件,可以对包进行 下载安装 , 更新 , 删除 , 上传 等操作 借助包管理工具,可以快速开发项目,提升开发效率 前端常用的包管理…...
AWR microwave office 仿真学习(二)使用多层结构天线/超表面的S参数确定层间距
引言 如果大家有看过一些多层天线或超表面的论文,有两种比较常用的分析方法,等效电路法和传输线分析法,这两种方法都是三维结构的电磁问题转换为二维/集总的电路问题。本文就介绍根据这种思想进行多层结构优化的一种方法:在AWR软件中根据单层结构的S参数,确定最佳层间距。…...
【zlm】 webrtc源码讲解三(总结)
目录 setsdp onwrite 编辑 play 参考 setsdp onwrite play 参考 【zlm】 webrtc源码讲解_zlm webrtc-CSDN博客 【zlm】 webrtc源码讲解(二)_webrtc 源码-CSDN博客...
Springboot+Druid(可切换Hikari)+Mybatis-plus+mysql+hive的多数据源项目配置
1.搭建一个springboot项目,不会的搜一下,很简单这里不做赘述。 2.首先你搭建的springboot能正常启动之后,pom文件添加如下依赖: <dependency><groupId>com.alibaba</groupId><artifactId>druid</arti…...
Git使用步骤
Git 是一个分布式版本控制系统,广泛用于软件开发和其他需要跟踪文件变更的项目。以下是 Git 的基本使用方法和一些常用命令的详细说明。 安装 Git 在大多数操作系统上,你可以通过包管理器安装 Git: Windows: 下载并安装 Git for Windows。…...
Python+OpenCV系列:AI看图识人、识车、识万物
在人工智能风靡全球的今天,用 Python 和 OpenCV 结合机器学习实现物体识别,不仅是酷炫技能,更是掌握未来的敲门砖。本篇博文手把手教你如何通过摄像头或图片输入,识别人、动物、车辆及其他物品,让你的程序瞬间具备 AI …...
springboot449教学资源共享平台(论文+源码)_kaic
摘 要 如今社会上各行各业,都喜欢用自己行业的专属软件工作,互联网发展到这个时候,人们已经发现离不开了互联网。新技术的产生,往往能解决一些老技术的弊端问题。因为传统教学资源共享平台信息管理难度大,容错率低&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
目录 容器如何持久化存储? PV和PVC 为什么不能直接在 Pod 或容器中存储数据? 什么是 PV和 PVC? 可以使用本地磁盘空间创建PV吗? 如何让客户端通过ftp上传到远端服务器的POD里面? 另一个POD想访问ftp的POD里面的…...
C中strlen和sizeof的区别
1、代码如下: #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、运行结果如下:...
WSL2内部的Ubuntu怎么设置网络内桥接模式,弄了好久老是不成功,怎么办?
环境: Win10专业版 WSL2 Ubuntu22.04 问题描述: WSL2内部的Ubuntu怎么设置网络内桥接模式 解决方案: 方法一 1.控制面板开启,Hyper-V 管理器 2.重启电脑 3…创建外部虚拟交换机 打开 Hyper-V 管理器,在右侧操作面板中点击“虚拟交换机管理器”。 选择“创建虚…...
Linux环境下 搭建ELk项目 -单机版练习
前言 ELK 项目是一个由三个开源工具组成的日志处理和分析解决方案,ELK 是 Elasticsearch、Logstash 和 Kibana 的首字母缩写。这个项目的目标是帮助用户采集、存储、搜索和可视化大量的日志和事件数据,尤其是在分布式系统中。下面是每个组件的概述&…...
ubuntu20.04安装mysql5.7
安装之前要确保之前没安装过或者安装后卸载干净了,不然后面的配置文件可能会报错。 1. 下载安装包 打开链接 downloads.mysql.com/archives/co… 选择相应版本进行下载,这里mysql版本选择 5.7.35,系统选择Ubuntu Linux,选择64位…...
MacPorts 安装 Tengine
创建 Portfile 以下是我参考 nginx 调整后的 Portfile,如需安装指定版本,除了修改版本号之外还需要修改 checksums 里的 sha256 sha256 值需下载 Tengine 源码文件(tar.gz)进行计算 模块的调整在最后的 configure.args-append …...
Git安装及基础学习
Git学习 Git安装 概述: Git是一个开源的分布式版本控制系统,可以有效、高速的处理 从很小到非常大的项目版本管理,是目前使用范围最广的版本 管理工具。 下载安装: 下载地址:https://git-scm.com/ 下载后傻瓜式一键安…...
【celery】任务有时候不执行
celery任务有时执行,有时不执行,这种情况是任务被冒领;有时执行说明这个方法可以使用,有时不执行通常是被使用同一个消息队列的进程冒领了; 解决 Redis:指定一个分块就行了...
【恶意软件检测论文】通过提取 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_网络服务相关_gateway_nacos_feign区别联系
1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...
Cesium1.95中高性能加载1500个点
一、基本方式: 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...
【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...
04-初识css
一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...
稳定币的深度剖析与展望
一、引言 在当今数字化浪潮席卷全球的时代,加密货币作为一种新兴的金融现象,正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而,加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下,稳定…...
LOOI机器人的技术实现解析:从手势识别到边缘检测
LOOI机器人作为一款创新的AI硬件产品,通过将智能手机转变为具有情感交互能力的桌面机器人,展示了前沿AI技术与传统硬件设计的完美结合。作为AI与玩具领域的专家,我将全面解析LOOI的技术实现架构,特别是其手势识别、物体识别和环境…...
Python 训练营打卡 Day 47
注意力热力图可视化 在day 46代码的基础上,对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...
消防一体化安全管控平台:构建消防“一张图”和APP统一管理
在城市的某个角落,一场突如其来的火灾打破了平静。熊熊烈火迅速蔓延,滚滚浓烟弥漫开来,周围群众的生命财产安全受到严重威胁。就在这千钧一发之际,消防救援队伍迅速行动,而豪越科技消防一体化安全管控平台构建的消防“…...
GraphQL 实战篇:Apollo Client 配置与缓存
GraphQL 实战篇:Apollo Client 配置与缓存 上一篇:GraphQL 入门篇:基础查询语法 依旧和上一篇的笔记一样,主实操,没啥过多的细节讲解,代码具体在: https://github.com/GoldenaArcher/graphql…...
