ELK日志管理

文章目录

  • 一、ELK概述
    • 什么是ELK?
    • 为什么使用ELK?
    • ELK的工作原理
  • 二、安装部署ELK
    • 前期准备
    • 安装部署Elasticsearch 软件
    • 修改系统配置
    • 安装插件
    • 在应用服务器上部署 Logstash
    • 安装 kibana


一、ELK概述

什么是ELK?

通俗来讲,ELK 是由 Elasticsearch、Logstash、Kibana 三个开源软件的组成的一个组合体,ELK 是 elastic 公司研发的一套完整的日志收集、分析和展示的企业级解决方案,在这三个软件当中,每个软件用于完成不同的功能,ELK 又称为ELK stack,官方域名为 elastic.co,ELK stack 的主要优点有如下几个:处理方式灵活: elasticsearch 是实时全文索引,具有强大的搜索功能配置相对简单:elasticsearch 的 API 全部使用 JSON 接口,logstash 使用模块配置,kibana 的配置文件部分更简单。检索性能高效:基于优秀的设计,虽然每次查询都是实时,但是也可以达到百亿级数据的查询秒级响应。集群线性扩展:elasticsearch 和 logstash 都可以灵活线性扩展前端操作绚丽:kibana 的前端设计比较绚丽,而且操作简单。

什么是Elasticsearch
Elasticsearch是一个高度可扩展的开源全文搜索和分析引擎,它可实现数据的实时全文搜索、支持分布式可实现高可用、提供 API 接口,可以处理大规模日志数据,比如 Nginx、Tomcat、系统日志等功能。Elasticsearch 使用 Java 语言开发,是建立在全文搜索引擎 Apache Lucene 基础之上的搜索引擎。https://lucene.apache.org/

Elasticsearch 的特点:

  • 实时搜索、实时分析
  • 分布式架构、实时文件存储
  • 文档导向,所有对象都是文档
  • 高可用,易扩展,支持集群,分片与复制
  • 接口友好,支持 json

什么是Logstash
Logstash 是一个具有实时传输能力的数据收集引擎,其可以通过插件实现日志收集和转发,支持日志过滤,支持普通 log、自定义 json 格式的日志解析,最终把经过处理的日志发送给 elasticsearch。

什么是kibana
Kibana 为 elasticsearch 提 供 一 个 查 看 数 据 的 web 界面 ,其 主 要 是 通 过elasticsearch 的 API 接口进行数据查找,并进行前端数据可视化的展现,另外还可以针对特定格式的数据生成相应的表格、柱状图、饼图等。

为什么使用ELK?

ELK 组件在海量日志系统的运维中,可用于解决以下主要问题:

  • 分布式日志数据统一收集,实现集中式查询和管理
  • 故障排查
  • 安全信息和事件管理
  • 报表功能

日志主要包括系统日志、应用程序日志和安全日志。系统运维和开发人员可以通过日志了解服务器软硬件信息、检查配置过程中的错误及错误发生的原因。经常分析日志可以了解服务器的负荷,性能安全性,从而及时采取措施纠正错误。
往往单台机器的日志我们使用grep、awk等工具就能基本实现简单分析,但是当日志被分散的储存不同的设备上。如果你管理数十上百台服务器,你还在使用依次登录每台机器的传统方法查阅日志。这样是不是感觉很繁琐和效率低下。当务之急我们使用集中化的日志管理,例如:开源的syslog,将所有服务器上的日志收集汇总。集中化管理日志后,日志的统计和检索又成为一件比较麻烦的事情,一般我们使用 grep、awk和wc等Linux命令能实现检索和统计,但是对于要求更高的查询、排序和统计等要求和庞大的机器数量依然使用这样的方法难免有点力不从心。
一般大型系统是一个分布式部署的架构,不同的服务模块部署在不同的服务器上,问题出现时,大部分情况需要根据问题暴露的关键信息,定位到具体的服务器和服务模块,构建一套集中式日志系统,可以提高定位问题的效率。

ELK的优势
ELK组件在大数据运维系统中,主要可解决的问题如下:

  • 日志查询,问题排查,故障恢复,故障自愈
  • 应用日志分析,错误报警
  • 性能分析,用户行为分析

ELK的工作原理

(1)在所有需要收集日志的服务器上部署Logstash;或者先将日志进行集中化管理在日志服务器上,在日志服务器上部署 Logstash。
(2)Logstash 收集日志,将日志格式化并输出到 Elasticsearch 群集中。
(3)Elasticsearch 对格式化后的数据进行索引和存储。
(4)Kibana 从 ES 群集中查询数据生成图表,并进行前端数据的展示。
总结:logstash作为日志搜集器,从数据源采集数据,并对数据进行过滤,格式化处理,然后交由Elasticsearch存储,kibana对日志进行可视化处理。

二、安装部署ELK

前期准备

架构
一主一备,一个客户端。
准备java环境
在这里插入图片描述

安装部署Elasticsearch 软件

准备软件。
在这里插入图片描述
修改配置文件
在这里插入图片描述

17 cluster.name: my-elk-cluster
修改集群名字
23 node.name: node1
24 node.master: true
25 node.data: true
设置 节点名称 主从之间不能一致    24作为主节点   25作为数据节点
45 bootstrap.memory_lock: true
内存锁开启  禁止使用  swa
59 network.host: 0.0.0.0
监听地址
60 http.port: 9200
默认使用端口
61 transport.tcp.port: 9300
内部传输端口
73 discovery.zen.ping.unicast.hosts: ["192.168.232.10:9300", "192.168.232.20:9300"]
自动集群发现,加入主机名  使用单播 类似心跳线

修改系统配置

性能调优参数

vim /etc/security/limits.conf
*  soft    nofile          65536
*  hard    nofile          65536
*  soft    nproc           32000
*  hard    nproc           32000
*  soft    memlock         unlimited
*  hard    memlock         unlimited

修改systemd服务管理器

/etc/systemd/system.conf 文件是用于配置 systemd 的,这是一种用于 Linux 操作系统的系统和服务管理器。通过这个文件,你可以自定义与系统操作、性能和行为相关的各种设置。

  • DefaultTimeoutStartSec=:设置启动服务的默认等待时间
  • DefaultTimeoutStopSec=:设置停止服务的默认等待时间
  • DefaultRestartSec=:设置在重新启动服务之前的默认休眠时间
  • DefaultLimitNOFILE=:设置打开文件数量的默认限制
  • DefaultLimitNPROC=:设置进程数量的默认限制
  • DefaultLimitCORE=:设置核心文件大小的默认限制
  • DefaultEnvironment=:指定服务的默认环境变量

修改内核参数
Lucene 是一个高性能、全功能的文本搜索引擎库,用于实现高效的文本索引和搜索。它是用 Java 编写的,可以嵌入到各种应用程序中,以提供强大的全文搜索功能。Lucene 是许多流行搜索平台的核心,如 Apache Solr 和 Elasticsearch。
以下是 Lucene 的一些关键特性和功能:

  1. 文本索引:Lucene 提供了强大的文本索引功能,能够处理大规模文本数据并生成高效的索引。
  2. 全文搜索:支持复杂的查询语法,包括布尔查询、短语查询、通配符查询、模糊查询等。
  3. 可扩展性:Lucene 设计为模块化和可扩展的,允许用户根据需要扩展和定制其功能。
  4. 分词和分析:提供了丰富的分词器和分析器,用于将文本分解为可索引和可搜索的词语。
  5. 排序和评分:支持对搜索结果进行排序和评分,以提高搜索的准确性和相关性。
  6. 多语言支持:支持多种语言的文本处理和搜索。

优化elasticsearch用户拥有的内存权限:
由于ES构建基于lucene, 而lucene设计强大之处在于lucene能够很好的利用操作系统内存来缓存索引数据,以提供快速的查询性能。lucene的索引文件segements是存储在单文件中的,并且不可变,对于OS来说,能够很友好地将索引文件保持在cache中,以便快速访问;因此,我们很有必要将一半的物理内存留给lucene ; 另一半的物理内存留给ES(JVM heap )。所以, 在ES内存设置方面,可以遵循以下原则:

  • 当机器内存小于64G时,遵循通用的原则,50%给ES,50%留给操作系统,供lucene使用。
  • 当机器内存大于64G时,遵循原则:建议分配给ES分配 4~32G 的内存即可,其它内存留给操作系统,供lucene使用。
vim /etc/sysctl.conf
一个进程可以拥有的最大内存映射区域数,参考数据(分配 2g/262144,4g/4194304,8g/8388608)
vm.max_map_count=262144

重启服务器,启动elasticsearch。

reboot
systemctl start elasticsearch.service
systemctl enable elasticsearch.service
netstat -antp | grep 9200

查看节点信息

浏览器访问  http://192.168.91.100:9200  查看节点node1、node2的信息。
浏览器访问http://192.168.232.10:9200/_cluster/health?pretty
查看群集的健康情况,可以看到 status 值为 green(绿色), 表示节点健康运行。
浏览器访问 http://192.168.232.10:9200/_cluster/state?pretty  检查群集状态信息

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

安装插件

谷歌浏览器插件
在这里插入图片描述
在这里插入图片描述
编译安装 Elasticsearch-head 插件
Elasticsearch 在 5.0 版本后,Elasticsearch-head 插件需要作为独立服务进行安装,需要使用npm工具(NodeJS的包管理工具)安装。
安装 Elasticsearch-head 需要提前安装好依赖软件 node phantomjs
node:是一个基于 Chrome V8 引擎的 JavaScript 运行环境。
phantomjs:是一个基于 webkit 的JavaScriptAPI,可以理解为一个隐形的浏览器,任何基于 webkit 浏览器做的事情,它都可以做到。

编译安装组件

编译安装node组件
yum install gcc gcc-c++ make -y
tar zxvf node-v8.2.1.tar.gz
cd node-v8.2.1/
./configure
make && make install安装 phantomjs
tar jxvf phantomjs-2.1.1-linux-x86_64.tar.bz2
cd /opt/phantomjs-2.1.1-linux-x86_64/bin
ln -s  /opt/phantomjs-2.1.1-linux-x86_64/bin/phantomjs   /usr/bin安装 Elasticsearch-head  数据可视化工具
unzip elasticsearch-head-master.zip
cd /opt/elasticsearch-head/
npm install		 

修改 Elasticsearch 主配置文件

vim /etc/elasticsearch/elasticsearch.yml
http.cors.enabled: true 
开启跨域访问支持,默认为 false
http.cors.allow-origin: "*"	
指定跨域访问允许的域名地址为所有systemctl restart elasticsearch
重启elasticsearch  服务

启动 elasticsearch-head 服务
必须 在解压后的 elasticsearch-head 目录下启动服务,进程会读取该目录下的 gruntfile.js 文件,否则可能启动失败。

cd /opt/elasticsearch-head/
npm run start &后台执行

在这里插入图片描述
测试插件
在这里插入图片描述
插入索引测试

curl -X PUT 'localhost:9200/index-demo/test/1?pretty&pretty' -H 'content-Type: application/json' -d '{"user":"zhangsan","mesg":"hello world"}'-x 指定方法
-H 添加请求头
-d 请求体

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在应用服务器上部署 Logstash

安装logstash

rpm -ivh logstash-6.7.2.rpm    
systemctl enable --now logstash.service
ln -s  /usr/share/logstash/bin/logstash   /usr/bin/

使用logstash
Logstash 命令常用选项:
-f :通过这个选项可以指定 Logstash 的配置文件,根据配置文件配置 Logstash 的输入和输出流。
-e :从命令行中获取,输入、输出后面跟着字符串,该字符串可以被当作 Logstash 的配置(如果是空,则默认使用 stdin 作为输入,stdout 作为输出)。
-t :测试配置文件是否正确,然后退出。

在命令行中收集日志数据,输入采用标准输入,输出采用标准输出(类似管道),新版本默认使用 rubydebug 格式输出。

logstash -e 'input { stdin{} } output { stdout{} }'

使用 Logstash 将信息写入 Elasticsearch 中

logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["192.168.232.10:9200"] } }'
结果不在标准输出显示,而是发送至 Elasticsearch 中,可浏览器访问 http://192.168.232.10:9100/ 查看索引信息和数据浏览。logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["192.168.232.10:9200","192.168.232.20:9200"]} }'

使用配置文件写入信息
Logstash 配置文件基本由三部分组成:input、output 以及 filter(可选,根据需要选择使用)

  • input:表示从数据源采集数据,常见的数据源如Kafka、日志文件等
    file beats kafka redis stdin

  • filter:表示数据处理层,包括对数据进行格式化处理、数据类型转换、数据过滤等,支持正则表达式
    grok 对若干个大文本字段进行再分割成一些小字段 (?<字段名>正则表达式) 字段名: 正则表达式匹配到的内容
    date 对数据中的时间格式进行统一和格式化
    mutate 对一些无用的字段进行剔除,或增加字段
    mutiline 对多行数据进行统一编排,多行合并或拆分

  • output:表示将Logstash收集的数据经由过滤器处理之后输出到Elasticsearch。
    elasticsearch stdout

格式如下:
input {...}
filter {...}
output {...}#在每个部分中,也可以指定多个访问方式。例如,若要指定两个日志来源文件,则格式如下:
input {file { path =>"/var/log/messages" type =>"syslog"}file { path =>"/var/log/httpd/access.log" type =>"apache"}vim system.conf
input {file{path =>"/var/log/messages"type =>"system"start_position =>"beginning"# ignore_older => 604800sincedb_path => "/etc/logstash/sincedb_path/log_progress"add_field => {"log_hostname"=>"${HOSTNAME}"}}
}
path表示要收集的日志的文件位置
type是输入ES时给结果增加一个叫type的属性字段
start_position可以设置为beginning或者end,beginning表示从头开始读取文件,end表示读取最新的,这个要和ignore_older一起使用
ignore_older表示了针对多久的文件进行监控,默认一天,单位为秒,可以自己定制,比如默认只读取一天内被修改的文件
sincedb_path表示文件读取进度的记录,每行表示一个文件,每行有两个数字,第一个表示文件的inode,第二个表示文件读取到的位置(byteoffset)。默认为$HOME/.sincedb*
add_field增加属性。这里使用了${HOSTNAME},即本机的环境变量,如果要使用本机的环境变量,那么需要在启动命令上加--alow-envoutput {elasticsearch {												输出到 elasticsearchhosts => ["192.168.232.10:9200","192.168.232.20:9200"]	指定 elasticsearch 服务器的地址和端口index =>"system-%{+YYYY.MM.dd}"							指定输出到 elasticsearch 的索引格式}
}
vim /etc/logstash/conf.d/system-log.conf 
nput {file {path => "/var/log/messages"type => "system"start_position => "beginning"}
}output {elasticsearch {hosts => [ "192.168.232.10:9200","192.168.232.20:9200" ]index => "system-%{+YYYY.MM.dd}"}
}chmod +r /var/log/messages 
添加权限
logstash   -f  system-log.conf 
以此文件启动。

在这里插入图片描述

安装 kibana

rpm -ivh kibana-6.7.2-x86_64.rpm 

修改配置

cd  /etc/kibana/
cp kibana.yml  kibana.yml.bak -a
vim kibana.yml
2  server.port: 5601          		
打开端口
7 server.host: "0.0.0.0"      	
监听端口
28  elasticsearch.hosts: ["http://192.168.232.10:9200", "http://192.168.232.20:9200"]  
elk服务器地址
37   kibana.index: ".kibana"        
打开索引
96   logging.dest: /var/log/k.log     
指定日志文件, 需要手动建立文件
114  i18n.locale: "zh-CN"             
中文设置chown kibana:kibana /var/log/k.log

访问192.168.232.10:5601

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/47009.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue3+TS从0到1手撸后台管理系统

1.路由配置 1.1路由组件的雏形 src\views\home\index.vue&#xff08;以home组件为例&#xff09; 1.2路由配置 1.2.1路由index文件 src\router\index.ts //通过vue-router插件实现模板路由配置 import { createRouter, createWebHashHistory } from vue-router import …

集合媒体管理、分类、搜索于一体的开源利器:Stash

Stash&#xff1a;强大的媒体管理工具&#xff0c;让您的影音生活井井有条- 精选真开源&#xff0c;释放新价值。 概览 Stash是一个专为个人媒体管理而设计的开源工具&#xff0c;基于 Go 编写&#xff0c;支持自部署。它以用户友好的界面和强大的功能&#xff0c;满足了现代用…

每日刷题(cf)

目录 1.C. Increasing Sequence with Fixed OR 2.C. Jellyfish and Green Apple 3.B. Jellyfish and Game 1.C. Increasing Sequence with Fixed OR Problem - C - Codeforces 题目要求我们构造一个最长的序列&#xff0c;使得任意相邻两个元素按位或等于n&#xff0c;我们对…

网络安全-网络安全及其防护措施5

21.互联网交换点&#xff08;ISP) IXP的定义和作用 互联网交换点&#xff08;IXP&#xff09;是一个物理基础设施&#xff0c;通过它&#xff0c;互联网服务提供商&#xff08;ISP&#xff09;和内容提供商可以互相交换互联网流量。IXP的目的是提高网络性能、降低带宽成本和减…

【源码阅读】osproxy对象存储分布式代理(1)

osproxy 项目地址 osproxy是一个使用Go语言开发的对象存储分布式代理(object-storage-distributed-proxy)&#xff0c;可以作为文件存储微服务&#xff0c;文件会在服务中转处理后再对接到对象存储&#xff0c;包括但不限于以下功能&#xff1a; 分布式uid及秒传&#xff0c;…

数仓工具—Hive语法之事务表更新Transactional Table Update

Hive事务表更新 众所周知,Apache Hive 是建立在 Hadoop HDFS 之上的数据仓库框架。由于它包含表,您可能希望根据数据的变化更新表记录。直到最近,Apache Hive 还不支持事务。从 Hive 0.14 及以上版本开始支持事务性表。您需要启用 ACID 属性才能在 Hive 查询中使用更新、删…

SQLMC:一款高性能大规模SQL注入安全扫描工具

关于SQLMC SQLMC是一款功能强大的高性能SQL注入安全扫描工具&#xff0c;该工具作为Kali Linux官方内置工具的其中一个部分&#xff0c;可以帮助广大研究人员检测目标域名的所有URL节点是否存在SQL注入问题。 该工具基于纯Python开发&#xff0c;适用于红队和蓝队成员&#xf…

【入门级】docker

开头处生动的描述一下”码头工人”吧&#xff1a;小鲸鱼&#xff08;登记处Registry&#xff1a;比如docker hub官方&#xff09;背着好多集装箱&#xff08;仓库repository&#xff1a;存放各种各样的镜像&#xff0c;一般存放的是一类镜像&#xff0c;这一类镜像中通过tag 版…

HTTP基本原理

URI URI Universal Resource Identifier 统一资源标志符 URI采用一种特定语法标识一个资源的字符串。所标识的资源可能是服务器上的一个文件。不过&#xff0c;也可能是一个邮件地址、新闻消息、图书、人名、Internet主机或者任何其它内容。 通过URI找到资源是通过对名称进行标…

京东Android一面凉经(2024)

京东Android一面凉经(2024) 笔者作为一名双非二本毕业7年老Android, 最近面试了不少公司, 目前已告一段落, 整理一下各家的面试问题, 打算陆续发布出来, 供有缘人参考。今天给大家带来的是《京东Android一面凉经(2024)》。 面试职位: Android开发工程师 技术一面 面试时长: 50…

如何解决隐藏游戏服务器的源IP问题

在网络游戏领域&#xff0c;保护服务器的源IP地址不被轻易发现是一项重要的安全措施。游戏服务器的源IP一旦暴露&#xff0c;可能会遭受DDoS攻击、扫描和各种形式的安全威胁。然而&#xff0c;对于合法的游戏运营商而言&#xff0c;有时需要对服务器进行维护或调试&#xff0c;…

2个方法快速解决word文档编辑限制

Word文档不能编辑的情况想必有很多的朋友都有碰到过吧&#xff0c;通常Word文档不能编辑主要是由于Word文档被加密或者Word文档被锁住导致&#xff0c;下面小编给大家整理了一些相关的解决方法&#xff0c;希望对大家有所帮助。 一、取消word文档限制保护 我们可以在文档里点击…

外卖系统定制开发:技术选型与架构设计要点

随着外卖行业的迅速发展&#xff0c;餐饮企业需要一个高效、稳定、可扩展的外卖系统来满足日益增长的用户需求。本文将探讨外卖系统定制开发的技术选型与架构设计要点&#xff0c;并提供一些示例代码来说明关键技术的实现。 一、技术选型 1. 前端技术选型 外卖系统的前端需要…

oracle adg切换

作者&#xff1a;广大 1 主库转备库 注意&#xff1a;原则上至多只能有一个主库&#xff0c;但是备库可以多个&#xff0c;所以需要先进行主库转备库操作。 1.1 查看主库角色切换状态 SYSproe>select name,database_role,switchover_status from v$database;NAME …

【node-RED 4.0.2】连接操作 Oracle 数据库实现 增 删 改 查【新版,使用新插件:@hylink/node-red-oracle】

总览 上节课&#xff0c;我们说到&#xff0c;在 node-red 上链接 oracle 数据库 我们使用的插件是 node-red-contrib-agur-connector。 其实后来我发现&#xff0c;有一个插件更简便&#xff0c;并且也更好用&#xff1a;hylink/node-red-oracle &#xff01;&#xff01;&am…

vue3 学习笔记11 -- 模板语法和指令

vue3 学习笔记11 – 模板语法和指令 模板语法 文本插值&#xff1a;使用双大括号 {{ }} 插入文本。 <script setup>const message ref("Hello Vue3!!") </script> <template><p>{{message}}</p> </template>指令 以 v- 开头…

Golang | Leetcode Golang题解之第240题搜索二维矩阵II

题目&#xff1a; 题解&#xff1a; func searchMatrix(matrix [][]int, target int) bool {m, n : len(matrix), len(matrix[0])x, y : 0, n-1for x < m && y > 0 {if matrix[x][y] target {return true}if matrix[x][y] > target {y--} else {x}}return f…

智能听诊器:宠物健康监测的革新者

宠物健康护理领域迎来了一项激动人心的技术革新——智能听诊器。这款创新设备以其卓越的精确度和用户友好的操作&#xff0c;为宠物主人提供了一种全新的健康监测方法。 使用智能听诊器时&#xff0c;只需将其放置在宠物身上&#xff0c;它便能立即捕捉到宠物胸腔的微小振动。…

linux安装keepalived教程

1.安装依赖包 yum install -y curl gcc openssl-devel libnl3-devel net-snmp-devel2.安装keepalived yum install -y keepalived3.更新配置 # 配置文件地址&#xff1a;/etc/keepalived/keepalived.conf # 1.主节点 vrrp_instance VI_1 {state MASTER # 状态只有MASTER和BA…

小狐狸GPT付费体验系统更新版本(历史版本)

3.0.2版本&#xff1a;小狐狸GPT付费体验系统下载&#xff08;需要密码&#xff09; 3.0.1版本&#xff1a;小狐狸GPT付费体验系统下载 2.7.2版本&#xff1a;小狐狸GPT付费体验系统下载 2.6.7版本&#xff1a;小狐狸GPT付费体验系统下载