ELK搭建以及使用教程(多pipiline)
1、环境准备
服务器:Centos7
Jdk版本:1.8
Es版本:7.12.1
kibana版本:7.12.1
logstash版本:7.12.1
| IP地址 | 安装软件 |
|---|---|
| 192.168.50.211 | Es,Kibana,logstash |
2、安装docker
安装步骤参考:https://blog.csdn.net/weixin_38405770/article/details/87979242
3、安装es
# 创建容器网络 elk-net
docker network create elk-net
# docker 安装 es
docker run -d \--name es \-e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \-e "discovery.type=single-node" \-v es-data:/usr/share/elasticsearch/data \-v es-plugins:/usr/share/elasticsearch/plugins \--privileged \--network elk-net \-p 9200:9200 \-p 9300:9300 \
elasticsearch:7.12.1# 开通端口
sudo iptables -A INPUT -p tcp --dport 9200 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 9300 -j ACCEPT
命令解释:
-e "cluster.name=es-docker-cluster":设置集群名称
-e "http.host=0.0.0.0":监听的地址,可以外网访问
-e "ES_JAVA_OPTS=-Xms512m -Xmx512m":内存大小
-e "discovery.type=single-node":非集群模式
-v es-data:/usr/share/elasticsearch/data:挂载逻辑卷,绑定es的数据目录
-v es-logs:/usr/share/elasticsearch/logs:挂载逻辑卷,绑定es的日志目录
-v es-plugins:/usr/share/elasticsearch/plugins:挂载逻辑卷,绑定es的插件目录
--privileged:授予逻辑卷访问权
--network elk-net :加入一个名为es-net的网络中
-p 9200:9200:端口映射配置
在浏览器中输入:http://192.168.50.211:9200 (按照自己的ip访问)即可看到elasticsearch的响应结果:

4、安装kibana
# docker 安装 kibana
docker run -d \
--name kibana \
-e ELASTICSEARCH_HOSTS=http://es:9200 \
-e "I18N_LOCALE=zh-CN" \
--network=elk-net \
-p 5601:5601 \
kibana:7.12.1
# 开通端口
sudo iptables -A INPUT -p tcp --dport 5601 -j ACCEPT
--network elk-net :加入一个名为es-net的网络中,与elasticsearch在同一个网络中
-e ELASTICSEARCH_HOSTS=http://es:9200":设置elasticsearch的地址,因为kibana已经与elasticsearch在一个网络,因此可以用容器名直接访问elasticsearch
-p 5601:5601:端口映射配置
在浏览器中输入:http://192.168.50.211:5601 (按照自己的ip访问)即可看到安装成功的结果:

5、安装Logstash
5.1 安装Logstash
# docker 安装 Logstash
docker run -d \
-p 5044:5044 -p 5045:5045 -p 9600:9600 \
--name logstash --network=elk-net logstash:7.12.1
# 开通端口
sudo iptables -A INPUT -p tcp --dport 5044 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 5045 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 9600 -j ACCEPT
-p 5044:5044 -p 5045:5045 # 为演示多管道开通的两个端口
5.2 设置ES的地址
创建完容器之后,需要在容器修改一些配置
#进入容器
docker exec -it logstash /bin/bash
找到config目录中的logstatsh.yml文件

修改里面的内容,设置es服务的地址,如下
http.host: "0.0.0.0"
xpack.monitoring.elasticsearch.hosts: [ "http://192.168.50.211:9200" ] #设置跟es的服务地址
5.3 设置logstash收集日志的输入和输出
#进入容器
docker exec -it logstash /bin/bash
在pipline目录中创建两个文件 logstash-demo.conf,logstash-test.conf

logstash-demo.conf 内容如下:
input {tcp {mode => "server"host => "0.0.0.0" # 允许任意主机发送日志port => 5044codec => json_lines # 数据格式}
}output {elasticsearch {hosts => ["http://192.168.50.211:9200"] # ElasticSearch 的地址和端口index => "demo" # 指定索引名,可以根据自己的需求指定命名codec => "json"}stdout {codec => rubydebug}
}
logstash-test.conf 内容如下:
input {tcp {mode => "server"host => "0.0.0.0" # 允许任意主机发送日志port => 5045codec => json_lines # 数据格式}
}output {elasticsearch {hosts => ["http://192.168.50.211:9200"] # ElasticSearch 的地址和端口index => "test" # 指定索引名,可以根据自己的需求指定命名codec => "json"}stdout {codec => rubydebug}
}
5.4 配置管道 pipline
#进入容器
docker exec -it logstash /bin/bash
进入config目录下找到 pipline.yml 配置文件

修改为如下配置:
- pipeline.id: demopath.config: "/usr/share/logstash/pipeline/logstash-demo.conf"
- pipeline.id: testpath.config: "/usr/share/logstash/pipeline/logstash-test.conf"
配置两个pipline只想不通的配置文件,我们记住 demo 端口为 5044; test 端口为 5045
6、应用系统对接logstash
创建两个springboot应用
加入如下依赖:
<dependency><groupId>net.logstash.logback</groupId><artifactId>logstash-logback-encoder</artifactId><version>6.6</version>
</dependency>
配置 logback-spring.xml 该配置应于 application.yml 同级

注意:这里需要注意下一下 logstash的服务地址和端口!!!
demo 应配置为:192.168.200.211:5044
test 应配置为:192.168.200.211:5045
<?xml version="1.0" encoding="UTF-8"?>
<configuration><include resource="org/springframework/boot/logging/logback/base.xml" /><springProperty scope="context" name="springAppName" source="spring.application.name"/><springProperty scope="context" name="serverPort" source="server.port"/><appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender"><!--logstash的服务地址和端口,可以实际情况设置--><destination>192.168.200.211:5044</destination><!-- 日志输出编码 --><encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"><providers><timestamp><timeZone>UTC</timeZone></timestamp><pattern><pattern>{<!--应用名称 -->"app": "${springAppName}_${serverPort}",<!--打印时间 -->"timestamp": "%d{yyyy-MM-dd HH:mm:ss.SSS}",<!--线程名称 -->"thread": "%thread",<!--日志级别 -->"level": "%level",<!--日志名称 -->"logger_name": "%logger",<!--日志信息 -->"message": "%msg",<!--日志堆栈 -->"stack_trace": "%exception"}</pattern></pattern></providers></encoder></appender><!--定义日志文件的存储地址,使用绝对路径--><property name="LOG_HOME" value="/home/logs"/><!-- 按照每天生成日志文件 --><appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!--日志文件输出的文件名--><fileNamePattern>${LOG_HOME}/${springAppName}-${serverPort}-%d{yyyy-MM-dd}.log</fileNamePattern></rollingPolicy><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder></appender><root level="INFO"><appender-ref ref="LOGSTASH" /><appender-ref ref="FILE" /><appender-ref ref="CONSOLE" /></root>
</configuration>
在application.yml文件中设置logback配置的目录
logging:config: classpath:logback-spring.xml
分别编写一个定时任务,产生日志数据
package com.example.demo.task;import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;/*** 测试定时任务*/
@Slf4j
@Component
public class TestTask {// 这个变量 如果在 demo 中 值为 demo ;如果在 test 中 值为 test 用来标记日志来源!private static final String APP = "demo";@Scheduled(cron = "0/5 * * * * ?")public void runTask() {log.info("{} 中定时任务 runTask 方法 执行了", APP);}
}
在启动类中开启Scheduled
package com.example.demo;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;@SpringBootApplication
@EnableScheduling
public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}}
分别启动两个应用,记住启动端口要改一下,不然端口占用起不来!!!
7、ELK基本使用
7.1 查看索引文件
对接项目之后,可以启动项目,产生一些日志数据
然后打开kibana 地址为:http://192.168.50.211:5601/ 根据实际情况修改地址,找到索引管理

可以查看已创建的日志索引


7.2 添加索引模式
如果想用kibana方便的查看日志的数据,可以添加索引模式,如下图:

输入索引名称然后点击下一步

选择时间字段后点击创建索引模式即可

test 应用创建索引模式同上,动手练一下吧。
7.3 检索日志
打开Discover

在筛选这里选择demo应用

可以看到有日志输出
切换到test应用查看

可以看到日志都正常输出了。
至此,elk简单的多pipiline就搭建并应用完成了。
相关文章:
ELK搭建以及使用教程(多pipiline)
1、环境准备 服务器:Centos7 Jdk版本:1.8 Es版本:7.12.1 kibana版本:7.12.1 logstash版本:7.12.1 IP地址安装软件192.168.50.211Es,Kibana,logstash 2、安装docker 安装步骤参考:https:…...
小程序如何设置用户同意服务协议并上传头像和昵称
为了保护用户权益和提供更好的用户体验,设置一些必填项和必读协议是非常必要的。首先,用户必须阅读服务协议。服务协议是明确规定用户和商家之间权益和义务的文件。通过要求用户在下单前必须同意协议,可以确保用户在使用服务之前了解并同意相…...
6.4 例程:使用互斥量
这个例程为使用多线程配合互斥量进行点乘计算,相关的数据通过全局变量的形式存在,因此可以被各个线程访问;每个线程会在相关数据的不同区域上进行处理,主线程等待子线程完成操作后,将最后的结果打印出来。 代码如下 #…...
[算法日志]图论: 深度优先搜索(DFS)
[算法日志]图论: 深度优先搜索(DFS) 深度优先概论 深度优先搜索算法是一种遍历图这种数据结构的算法策略,其中心思想是朝图节点的一个方向不断跳转,当该节点无下一个节点或所有方向都遍历完时,便回溯朝上一个节点的另一个方向…...
这道经典SQL面试问题你会吗?
大家经常自嘲后端开发就是crud boy嘛,今天给大家看一道SQL题,我相信很多人写不出来。我们来看一下这个题目。 create table course (id int primary key,name varchar(32) not null ); create table student (id int primary key,name varchar(32) not …...
网络服务退出一个问题的解析
一、问题 在实际开发中遇到一个问题,解决的过程虽然不长,但确实是想得比较多,总结一下,以供参考。这是一个网络通信的服务端而且使用的是别人封装好的库,通信等都没有问题,但在退出时会报一个错误…...
第四次pta认证P测试
第一题 试题编号: 试题名称:整数排序 时间限制: 1.0s 内存限制: 128.0MB 【问题描述】 老师给定 10 个整数的序列,要求对其重新排序。排序要求: 1.奇数在前,偶数在后; 2.奇数按从大到小排序&am…...
mysql:B+树/事务
B树 : 为了数据库量身定做的数据结构 我们当前这里的讨论都是围绕 mysql 的 innodb 这个存储引擎来讨论的 其他存储引擎可能会用到hash 作为索引,此时就只能应对这种精准匹配的情况了 要了解 B树 我们先了解 B树, B树 是 B树 的改进 B树 有时候会写作 B-树 (这里的" -…...
python-在系统托盘显示CPU使用率和内存使用率
一、添加轮子 1.添加托盘区图标库 infi.systray from infi.systray import SysTrayIcon 2.添加图像处理库 Pillow from PIL import Image, ImageDraw, ImageFont 3.添加 psutil 来获取CPU、内存信息 import psutil 二、完整代码 from infi.systray import SysTrayIcon …...
构建mono-repo风格的脚手架库
前段时间阅读了 https://juejin.cn/post/7260144602471776311#heading-25 这篇文章;本文做一个梳理和笔记; 主要聚焦的知识点如下: 如何搭建脚手架工程如何开发调试如何处理命令行参数如何实现用户交互如何拷贝文件夹或文件如何动态生成文件…...
云安全—etcd攻击面
0x00 前言 本篇还是一样,先来说一说etcd是什么,干啥的,然后再来看看etcd的攻击面到底有哪些,做一个抛砖引玉的作用,如有不妥之处还请斧正 0x01 etcd 依旧还是按照问问题的方式来进行阐述,因为学到的东西…...
类锁和实例对象锁你分清了吗?
系列文章目录 文章目录 系列文章目录前言一、什么是锁竞争?二、什么是类锁?什么是实例对象锁?三、给类对象加锁不是锁住了整个类四、总结 前言 java选手们应该都对锁不陌生,加锁了就是为保证操作语句的原子性,如果你是…...
如何在麒麟上安装 ONLYOFFICE 桌面编辑器
我们很高兴地告诉大家,ONLYOFFICE 桌面编辑器现已上架麒麟软件商店。请阅读下文了解详情。 关于麒麟 麒麟是一款国产操作系统,主要是为了满足中国市场的需求和偏好而设计的。 它能够与各种硬件平台和软件应用程序的广泛兼容,因而受到认可。…...
记录:如何编写linux驱动,用module的方式
记录:如何编写Linux驱动,用module的方式 记录:如何编写Linux驱动,用module的方式参考记录:如何编写Linux驱动,用module的方式 编写一个 Linux 的驱动,用 module 方式开发,一般来说,编写一个 Linux 的驱动,需要遵循以下步骤: 确定设备的类型和功能,以及它在系统中的…...
3款免费又好用的 Docker 可视化管理工具
前言 Docker提供了命令行工具(Docker CLI)来管理Docker容器、镜像、网络和数据卷等Docker组件。我们也可以使用可视化管理工具来更方便地查看和管理Docker容器、镜像、网络和数据卷等Docker组件。今天我们来介绍3款免费且好用的 Docker 可视化管理工具。…...
C语言--判断一个年份是否是闰年(详解)
一.闰年的定义 闰年是指在公历(格里高利历)中,年份可以被4整除但不能被100整除的年份,或者可以被400整除的年份。简单来说,闰年是一个比平年多出一天的年份,即2月有29天。闰年的目的是校准公历与地球公转周…...
Python---排序算法
文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据总结 前言 Python中的排序算法用于对数据进行排序。排序算法可以使数据按照一定的规则进行排列,以便于数据的查找、统计、比较等操作。在数据分析、机器学习、图形计算等领域,…...
gitlab Blocking and unblocking users
原文:Redirecting... Blocking a userUnblocking a user Blocking and unblocking users GitLab 管理员阻止和取消阻止用户. Blocking a user 为了完全阻止用户访问 GitLab 实例,管理员可以选择阻止该用户. 可以通过滥用报告或直接从管理区域来阻止…...
Swift 和 Python 两种语言中带关联信息错误(异常)类型的比较
0. 概览 如果我们分别在平静如水、和谐感人的 Swift 和 Python 社区抛出诸如“Python 是天下最好的语言…” 和 “Swift 是宇宙第一语言…”之类的言论会有怎样的“下场”? 我们并不想对可能发生的“炸裂”景象做出什么预测,也无意比较 Swift 与 Pytho…...
北京联通iptv组播配置
多年前折腾过iptv,近期搬家换了个大电视,打算把iptv配置好了,尽管不怎么看,但聊胜于无。 其实很简单,用到了一些工具,记录如下 1. openwrt配置 因为有软路由,所以就借助openwrt了,一…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...
Appium+python自动化(十六)- ADB命令
简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试…...
Docker 运行 Kafka 带 SASL 认证教程
Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...
Qt Widget类解析与代码注释
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...
css的定位(position)详解:相对定位 绝对定位 固定定位
在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...
【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...
Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信
文章目录 Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket(服务端和客户端都要)2. 绑定本地地址和端口&#x…...
回溯算法学习
一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...
MinIO Docker 部署:仅开放一个端口
MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...
