ELK日志收集
目前,各个微服务系统的日志都保存在各自指定的目录中,如果这些微服务部署在不同的服务器上,那么日志文件也是分散在各自的服务器上。分散的日志不利于我们快速通过日志定位问题,我们可以借助ELK来收集各个微服务系统的日志并集中展示。
ELK即Elasticsearch、Logstash和Kibana首字母缩写。Elasticsearch用于存储日志信息,Logstash用于收集日志,Kibana用于图形化展示。
搭建ELK环境
在Windwos上搭建ELK环境较为麻烦,这里我选择在CentOS7 上通过Docker来搭建ELK环境,对Docker基本使用不熟悉的同学可以参考 Docker基础教程。
在此之前,我们需要准备一台CentOS 7虚拟机。推荐大家使用Vagrant来创建,创建教程可以参考:使用Vagrant创建CentOS虚拟机。这里分享下我的Vagrantfile配置:
Vagrant.configure("2") do |config|config.vm.box = "centos7"config.vm.network "private_network", ip: "192.168.33.10"config.vm.hostname = "febs"config.vm.provider "virtualbox" do |v|v.memory = 6144v.cpus = 2endend
上面配置了虚拟机的IP地址为192.168.33.10,hostname为febs,内存为6*1024MB(6144MB即6GB),cpu核心数为2。
安装docker
在CMD终端使用命令vagrant ssh
连接虚拟机后,运行sudo -s
切换到root用户,下面的示例都是用root用户完成的。
在Linux中安装Docker可以参考官方文档:CentOS | Docker Docs,主要分为下面这几步:
-
卸载旧版本Docker(如果系统之前没安装过Docker,可以跳过):
yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine
-
安装Docker所需要的包:
yum install -y yum-utils \device-mapper-persistent-data \lvm2
-
设置稳定的仓库:
yum-config-manager \--add-repo \https://download.docker.com/linux/centos/docker-ce.repo
-
安装最新版的Docker引擎:
yum install docker-ce docker-ce-cli containerd.io
-
启动Docker:
systemctl start docker
查看是否安装成功:
安装Docker Compose
安装好Docker后,我们接着安装Docker Compose,官方安装教程 Install | Docker Docs,主要步骤为:
-
获取Docker Compose的最新稳定版本:
curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
-
对二进制文件授予可执行权限:
chmod +x /usr/local/bin/docker-compose
-
创建link:
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
查看是否安装成功:
Docker Compose搭建ELK
在搭建ELK之前,我们需要做一些准备工作。
正如官方所说的那样 Virtual memory | Elasticsearch Guide [8.15] | Elastic,Elasticsearch默认使用mmapfs目录来存储索引。操作系统默认的mmap计数太低可能导致内存不足,我们可以使用下面这条命令来增加内存:
sysctl -w vm.max_map_count=262144
创建Elasticsearch数据挂载路径:
mkdir -p /febs/elasticsearch/data
对该路径授予777权限:
chmod 777 /febs/elasticsearch/data
创建Elasticsearch插件挂载路径:
mkdir -p /febs/elasticsearch/plugins
创建Logstash配置文件存储路径:
mkdir -p /febs/logstash
在该路径下创建logstash-febs.conf
配置文件(没有安装vim的话可以使用yum install vim
命令安装):
vim /febs/logstash/logstash-febs.conf
内容如下所示:
input {tcp {mode => "server"host => "0.0.0.0"port => 4560codec => json_lines}}output {elasticsearch {hosts => "es:9200"index => "febs-logstash-%{+YYYY.MM.dd}"}}
创建ELK Docker Compose文件存储路径:
mkdir -p /febs/elk
在该目录下创建docker-compose.yml
文件:
vim /febs/elk/docker-compose.yml
内容如下所示:
version: '3'services:elasticsearch:image: elasticsearch:6.4.1container_name: elasticsearchenvironment:- "cluster.name=elasticsearch" #集群名称为elasticsearch- "discovery.type=single-node" #单节点启动- "ES_JAVA_OPTS=-Xms512m -Xmx512m" #jvm内存分配为512MBvolumes:- /febs/elasticsearch/plugins:/usr/share/elasticsearch/plugins- /febs/elasticsearch/data:/usr/share/elasticsearch/dataports:- 9200:9200kibana:image: kibana:6.4.1container_name: kibanalinks:- elasticsearch:es #配置elasticsearch域名为esdepends_on:- elasticsearchenvironment:- "elasticsearch.hosts=http://es:9200" #因为上面配置了域名,所以这里可以简写为http://es:9200ports:- 5601:5601logstash:image: logstash:6.4.1container_name: logstashvolumes:- /febs/logstash/logstash-febs.conf:/usr/share/logstash/pipeline/logstash.confdepends_on:- elasticsearchlinks:- elasticsearch:esports:- 4560:4560
切换到/febs/elk
目录下,使用如下命令启动:
docker-compose up -d
第一次启动的时候,Docker需要拉取ELK镜像,过程可能稍慢,耐心等待即可。成功启动后,观察容器运行情况:
三个容器都已经启动成功。
Logstash中安装json_lines插件
使用如下命令进入到Logstash容器中:
docker exec -it logstash /bin/bash
切换到/bin目录,安装json_lines插件,然后退出:
使用浏览器访问http://192.168.33.10:5601便可以看到Kibana管理界面:
修改微服务日志配置
就目前微服务模块来说,我们比较关注febs-auth、febs-gateway、febs-server-system和febs-server-test模块的日志,所以我们分别在febs-auth、febs-gateway和febs-server模块的pom里引入Logstash
依赖:
<dependency><groupId>net.logstash.logback</groupId><artifactId>logstash-logback-encoder</artifactId><version>6.1</version></dependency>
然后在febs-auth、febs-gateway、febs-server-system和febs-server-test模块的日志配置文件logback-spring.xml
里添加如下配置:
<!--输出到 logstash的 appender--><appender name="logstash" class="net.logstash.logback.appender.LogstashTcpSocketAppender"><destination>192.168.33.10:4560</destination><encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"/></appender>......<root level="info">......<appender-ref ref="logstash" /></root>
192.168.33.10:4560
对应我们刚刚搭建的Logstash地址。
演示
依次启动febs-register、febs-gateway、febs-auth、febs-server-system和febs-server-test模块,然后回到Kibana管理界面创建Kinaba Index Patterns:
在Index pattern里输入我们在logstash配置文件logstash-febs.conf
里output.index
指定的值febs-logstash-*
:
点击Next Step,在下拉框里选择@timestamp
:
最后点击Create Index Pattern按钮完成创建。
使用PostMan获取令牌:
然后发送一笔localhost:8301/test/hello?name=夏天请求:
在Kibana里搜索这笔日志:
日志收集成功。
整合ELK后,我们的系统架构图如下所示:
相关文章:
ELK日志收集
目前,各个微服务系统的日志都保存在各自指定的目录中,如果这些微服务部署在不同的服务器上,那么日志文件也是分散在各自的服务器上。分散的日志不利于我们快速通过日志定位问题,我们可以借助ELK来收集各个微服务系统的日志并集中展…...
常见docker命令
1、查询已安装docker中某个image依赖包 docker run -it --rm --name my-python-container 【python37:v001】 /bin/bash 【】改成自己环境名字 docker run -it --name lane python37_test:v006 /bin/bash lane是容器名字,python37_test:v006 是镜像名 开启容器 do…...
测试新人刚入行,该如何规划以后的发展路径?
作为一个刚入行的测试新人,应该如何规划自己的职业发展路径?如何规划自己的技术路线?软件测试的段位都有哪些?他们之间的薪资差异如何? 听说这些问题,是目前想要入行软件测试的同学们最关心的。那么我们今…...
Boosting Object Detection with Zero-Shot Day-Night Domain Adaptation
摘要:低亮度场景检测是一个小众且重要的方向,首先在于数据集和过往的研究都集中在光照充足的环境下,其次如果使用传统的训练方法的话由于训练难度大,模型效果也不会很好,有幸的是,现在关于低亮度的研究已经…...
Chromium html<lable>c++接口定义
HTML <label> 元素(标签)表示用户界面中某个元素的说明。 1、<label> 在html_tag_names.json5中接口定义: (third_party\blink\renderer\core\html\html_tag_names.json5) {name: "label",inte…...
QT中中文显示乱码问题
在VS2013中用QT开发GUI应用程序,Qt中显示中文乱码 一: //解决QT中中文显示乱码问题 #pragma execution_character_set("utf-8") 二:在main函数中添加以下代码: #include <QTextCodec>void main() {QTextCod…...
[面试常见]Javascript基础知识
#1024程序员节|征文# Object.assign 和对象扩展运算符有什么区别?是深拷贝还是浅拷贝? 都进行浅拷贝,只赋值对象的第一层属性,而不会递归复制整个对象结构 **const mergedObj Object.assign({},obj1,obj2) JavaScript 中 Map 和 Object 的区别是什么?…...
使用注解@ExcelIgnoreUnannotated实现了在导出 Excel 时忽略没有被标注的字段
ExcelIgnoreUnannotated 注解用于在使用 Apache POI 或其他 Excel 处理库时,指示在导出 Excel 时忽略没有被标注的字段。这意味着只有被特定注解(如 ExcelProperty)标注的字段会被处理和导出。 作用 简化导出过程:只导出需要的字…...
线程的同步
目录 引入 认识条件变量 快速认识接口编辑 认识条件变量编辑 测试代码编辑 生产消费模型 为何要使用生产者消费者模型 理解 编写生产消费模型 BlockingQueue 单生产单消费 多生产多消费 引入 同步:在保证数据安全的前提下,让线程…...
【启明智显分享】ZX7981PG/ZX7981PM融入官方OpenWrt,启明智显SDK/官方OpenWrt任由选择!
好消息!好消息!启明智显ZX7981PG和ZX7981PM正式融入官方 OpenWrt 的大家庭啦!现在开发者不仅可以基于启明智显的SDK进行二次开发,还可以直接应用官方OpenWrt以及我们的开源资料进行开发! 借助OpenWrt的强大生态&…...
如何用java发送包含表格形式的邮件
问题: 如何用java发送包含表格形式的邮件? 方法: 发用freemaker工具来替换html的表格变量,从而动态生成了html。然后再发送这个html格式(不能用纯文本)文本即可。 优化流程: 1、准备模板&#x…...
讲个故事:关于一次接口性能优化的心里路程
这是一个程序猿写的第一个故事,请各位懂行的客官静下心来,慢慢品读。就知道我为什么要单独写一个文章来记录这次过程了,因为实在是太坎坷了...... 背景介绍 近期项目投产时遇到一个问题,投产后在验证时发现大部分用户系统登…...
Centos7升级到openssh9.9
openssh9.9 是2024.9.20出的最新版ssh。因为客户扫描出一大堆centos7的漏洞,全是这个openssh的,好多补丁,所以索性升级到最新版。 需要自己制作rpm包,这个我是不懂,照这个来: Linux服务器升级openssh9.9最…...
使用 STM32F407 串口实现 485 通信
准备工作 了解485通信基本概念与原理:RS485通信详解_485通讯de接什么口-CSDN博客 安装编译软件:keil uVision 5.6 软件资料:STM32CubeF4 固件包,正点原子RS485通信例程 参考视频:第26讲 基础篇-新建H…...
基于NERF技术重建学习笔记
NeRF(Neural Radiance Fields)是一种用于3D场景重建的神经网络模型,能够从2D图像生成逼真的3D渲染效果。它将场景表征为一个连续的5D函数,利用了体积渲染和神经网络的结合,通过学习光线穿过空间时的颜色和密度来重建场…...
webView 支持全屏播放
webView 支持全屏播放 直接上代码 public class CustomFullScreenWebViewClient extends WebChromeClient {WebView webView;Context context;/*** 视频全屏参数*/protected static final FrameLayout.LayoutParams COVER_SCREEN_PARAMS new FrameLayout.LayoutParams(ViewG…...
QGIS之三十二DEM地形导出三维模型gltf
效果 1、准备数据 (1)dem.tif (2)dom.tif 2、qgis加载dem和dom数据 3、安装插件 插件步骤可以参考这篇文章 QGIS之二十四安装插件 安装了Qgis2threejs插件,结果...
【python爬虫】携程旅行景点游客数据分析与可视化
一.选题背景 随着旅游业的快速发展,越来越多的人选择通过互联网平台预订旅行产品,其中携程网作为国内领先的在线旅行服务提供商,拥有大量的旅游产品和用户数据。利用爬虫技术可以获取携程网上各个景点的游客数据,包括游客数量、游…...
python实现onvif协议下控制摄像头变焦,以及融合人形识别与跟踪控制
#1024程序员节 | 征文# 这两天才因为项目需要,对网络摄像头的视频采集以及实现人形识别与跟踪技术。对于onvif协议自然起先也没有任何的了解。但是购买的摄像头是SONY网络头是用在其他地方的。因为前期支持探究项目解决方案,就直接拿来做demo测试使用。 …...
【Vue】Vue3.0(十四)接口,泛型和自定义类型的概念及使用
上篇文章: 【Vue】Vue3.0(十三)中标签属性ref(加在普通标签上、加在组件标签上)、局部样式 🏡作者主页:点击! 🤖Vue专栏:点击! ⏰️创作时间&…...
【C++】红黑树万字详解(一文彻底搞懂红黑树的底层逻辑)
目录 00.引入 01.红黑树的性质 02.红黑树的定义 03.红黑树的插入 1.按照二叉搜索树的规则插入新节点 2.检测新节点插入后,是否满足红黑树的性质 1.uncle节点存在且为红色 2.uncle节点不存在 3.uncle节点存在且为黑色 04.验证红黑树 00.引入 和AVL树一样&am…...
开源FluentFTP实操,操控FTP文件
概述:通过FluentFTP库,轻松在.NET中实现FTP功能。支持判断、创建、删除文件夹,判断文件是否存在,实现上传、下载和删除文件。简便而强大的FTP操作,提升文件传输效率。 在.NET中,使用FluentFTP库可以方便地…...
论文解读 | ECCV2024 AutoEval-Video:一个用于评估大型视觉-语言模型在开放式视频问答中的自动基准测试...
点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入! 点击 阅读原文 观看作者讲解回放! 作者简介 陈修元,上海交通大学清源研究院硕士生 概述 总结来说,我们提出了一个新颖且具有挑战性的基准测试AutoEvalVideo,用于全…...
postgresql14主从同步流复制搭建
1. 如果使用docker搭建请移步 Docker 启动 PostgreSQL 主从架构:实现数据同步的高效部署指南_docker安装postgresql主从同步-CSDN博客 2. 背景 pgsql版本:PostgreSQL 14.13 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4…...
企业信息化管理中的数据集成方案:销售出库单对接
企业信息化管理中的数据集成方案:销售出库单对接 销售出库单旺店通→金蝶:高效数据集成案例分享 在企业信息化管理中,数据的高效流动和准确对接是实现业务流程自动化的关键。本文将聚焦于一个具体的系统对接集成案例:如何将旺店通…...
3.cpp基本数据类型
cpp基本数据类型 1.cpp基本数据类型 1.cpp基本数据类型 C基本数据类型和C语言的基本数据类型差不多 注意bool类型:存储真值 true 或假值 false,C语言编译器C99以上支持。 C语言的bool类型:要添加 #include <stdbool.h>头文件 #includ…...
MCK主机加固与防漏扫的深度解析
在当今这个信息化飞速发展的时代,网络安全成为了企业不可忽视的重要议题。漏洞扫描,简称漏扫,是一种旨在发现计算机系统、网络或应用程序中潜在安全漏洞的技术手段。通过自动化工具,漏扫能够识别出系统中存在的已知漏洞࿰…...
《软件估算之原始功能点:精准度量软件规模的关键》
《软件估算之原始功能点:精准度量软件规模的关键》 一、软件估算的重要性与方法概述二、原始功能点的构成要素(一)数据功能(二)事务功能 三、原始功能点的估算方法(一)功能点分类估算࿰…...
序列化与反序列化
序列化和反序列化是数据处理中的两个重要概念,它们在多种场景下都非常有用,尤其是在分布式系统、网络通信、持久化存储等方面。下面是对这两个概念的详细解释: 序列化(Serialization) 定义:序列化是将对象…...
安装nginx实现多ip访问多网站
[rootlocalhost ~]# systemctl stop firewalld 关防火墙 [rootlocalhost ~]# setenforce 0 关selinux [rootlocalhost ~]# mount /dev/sr0 /mnt 挂载点 [rootlocalhost ~]# dnf install nginx -y 安装nginx [rootlocalhost ~]# nmtui 当前主机添加多地址 [rootlocal…...
网站建设的目的及功能定位/网站软文代写
云端漫步 微软私有云技术征文大赛奖品...
西宁网站建设公司排名/查看今日头条
未到不惑年,还须惑十年 工作没了,钱没了,信念还在,少了些包袱。 路还得继续走,敢问路在何方,路在脚下,往前走就是了。 回望过去,收拾收拾,扔在记忆的角落吧。 谁不曾从一…...
京津冀协同发展意义/aso搜索排名优化
第1页:AHCI模式与Win7、SSD的不解之缘 AHCI这个注定和SATA接口结下不解之缘的接口模式,它担负着淘汰IDE模式的重任,从诞生开始就充满争议,它经历了整整7年时间。它伴随着SSD固态硬盘兴旺走向主流,同时也和微软WinXP、W…...
深圳专业做网站的公司/北京seo代理公司
什么?你还不会写JQuery 插件转载于:https://www.cnblogs.com/lbonet/p/7274968.html...
万户网络官网/搜索引擎优化seo培训
主库:192.168.0.11 备选主库:192.168.0.12 从库:192.168.0.13 监控机:192.168.0.10 首先在三台机器上安装mysql(监控机的mysql先不装,以后再说)。 我使用percona server(一个mysql的…...
淘客网站推广怎么做/网络公关公司联系方式
1 /**2 * 3 * Title: getDoctorProfit 4 * Description: 获取当日的利润明细(已付款以后的状态,包含当日总计)5 * author: lijunwei6 * date 2018年8月25日 下午3:35:247 * param queryDate8 * param doctorid9 * return Map<Stri…...