ELK部署

server/2024/12/23 2:32:58/

背景

很多公司还是在单体项目中苦苦挣扎,没有必要上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

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


http://www.ppmy.cn/server/152383.html

相关文章

Bootstrap Blazor中使用PuppeteerSharp对HTML截图

PuppeteerSharp是一个基于.NET的库&#xff0c;提供了对Puppeteer的C#支持&#xff0c;用于自动化&#xff0c;可用于测试、截图、爬虫等任务。 官网&#xff1a;Puppeteer Sharp&#xff08;感觉文章中有些代码段没有更新&#xff0c;直接用会有报错&#xff09;。 本篇文章…

Trimble天宝三维激光扫描仪在建筑工程竣工测量中的应用【沪敖3D】

竣工测量是建筑项目竣工阶段的一个至关重要的环节&#xff0c;它为建筑工程的质量验收和成果核查提供了核心的参考依据。传统的竣工测量方法&#xff0c;如全站仪测量&#xff0c;主要依赖于现场人工操作&#xff0c;存在一些明显的局限性&#xff0c;例如作业时间长、工作量大…

uni-app商品搜索页面

目录 一:功能概述 二:功能实现 一:功能概述 商品搜索页面,可以根据商品品牌,商品分类,商品价格等信息实现商品搜索和列表展示。 二:功能实现 1:商品搜索数据 <view class="search-map padding-main bg-base"> <view class…

uniapp使用腾讯地图接口的时候提示此key每秒请求量已达到上限或者提示此key每日调用量已达到上限问题解决

要在创建的key上添加配额 点击配额之后进入分配页面&#xff0c;分配完之后刷新uniapp就可以调用成功了。

VMware虚拟机Ubuntu 18.04版本 磁盘扩容

一、版本配置 虚拟机版本&#xff1a;VMware WORKSTATION 16 PRO Ubuntu版本&#xff1a;Ubuntu 18.04 二、磁盘大小介绍 目的&#xff1a;磁盘扩容&#xff08;20G----->100G&#xff09;&#xff0c;从20G扩到100G 查看磁盘大小命令&#xff1a;df -h 扩容前的磁盘大小 …

MySQL -- 库的相关操作

目录 查看数据库 创建数据库 直接创建&#xff1a; 加约束条件 if not exists 字符集和校对规则 什么是字符集 什么是校对规则 校对规则的主要功能 校对规则的特性 查看指定的数据库使用的字符集和校对规则&#xff1a; 比较是否区分大小写字母差异 显示创建语句 …

QP:Query类目

Query类目 Query类目指的是根据查询内容将查询词Query归类到某个特定的分类体系中。这个体系通常是多级的&#xff0c;能够将查询词从更广泛的类别逐渐细分到更具体的子类目&#xff0c;这个体系通常在电商搜索和推荐领域中有重要的作用。 Query和Doc一般共用一套类目体系&am…

【每日一题 基础题】[蓝桥杯 2020 省 AB3] 乘法表

[蓝桥杯 2020 省 AB3] 乘法表 乘法表 九九乘法表是学习乘法时必须要掌握的。在不同进制数下&#xff0c;需要不同的乘法表。 例如, 四进制下的乘法表如下所示&#xff1a; 1 * 11 2 * 12 2 * 210 3 * 13 3 * 212 3 * 321 请注意&#xff0c;乘法表中两个数相乘的顺序必须为样例…