ELK日志收集系统(四十九)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

目录

前言

一、概述

二、组件

1. elasticsearch

2. logstash

2.1 工作过程

2.2 INPUT

2.3  FILETER

2.4  OUTPUTS

3. kibana

三、架构类型

3.1 ELK

3.2 ELKK

3.3 ELFK

3.5 EFK

四、案例



前言

ELK日志收集系统是一种常用的开源系统,由三个主要组件组成:Elasticsearch、Logstash和Kibana。

  • Elasticsearch是一个基于Lucene的分布式搜索和分析引擎,用于存储和索引大量数据。它能够快速地搜索和分析大规模的日志数据,并支持实时的数据查询和聚合分析。

  • Logstash是一个用于数据收集、处理和传输的工具。它能够从各种来源(如文件、数据库、消息队列等)收集日志数据,并对其进行过滤、转换和标准化处理,然后将数据发送给Elasticsearch进行存储和索引。

  • Kibana是一个用于数据可视化和分析的工具。它提供了用户友好的界面,可以通过图表、表格、仪表盘等方式展示和分析存储在Elasticsearch中的日志数据。用户可以使用Kibana进行数据查询、聚合、筛选和导出,并可以自定义仪表盘和报告。

ELK日志收集系统能够帮助企业集中收集、存储和分析各种类型的日志数据,提供实时的监控、诊断和故障排查能力,帮助提高系统的稳定性和性能。它还支持可扩展性和高可用性,并提供了丰富的插件和扩展机制,可以与其他工具和系统集成。


提示:以下是本篇文章正文内容,下面案例可供参考

一、概述

ELK由三个组件构成
    作用
        日志收集
        日志分析
        日志可视化
    为什么使用?
        日志对于分析系统、应用的状态十分重要,但一般日志的量会比较大,并且比较分散。
        如果管理的服务器或者程序比较少的情况我们还可以逐一登录到各个服务器去查看、分析。但如果服务器或者程序的数量比较多了之后这种方法就显得力不从心。基于此,一些集中式的日志系统也就应用而生。目前比较有名成熟的有,Splunk(商业)、FaceBook 的Scribe、Apache的Chukwa Cloudera的Fluentd、还有ELK等等。

二、组件

1. elasticsearch

日志分析
    开源的日志收集、分析、存储程序
    特点
        分布式
        零配置
        自动发现
        索引自动分片
        索引副本机制
        Restful风格接口
        多数据源
        自动搜索负载

2. logstash

日志收集
 搜集、分析、过滤日志的工具

2.1 工作过程

一般工作方式为c/s架构,Client端安装在需要收集日志的服务器上,Server端负责将收到的各节点日志进行过滤、修改等操作,再一并发往Elasticsearch上去
        Inputs → Filters → Outputs
        输入-->过滤-->输出

2.2 INPUT

File:从文件系统的文件中读取,类似于tail -f命令

Syslog:在514端口上监听系统日志消息,并根据RFC3164标准进行解析

(要使用 Logstash 从 Syslog 中读取数据,您可以按照以下步骤进行配置:

   1. 创建 Logstash 配置文件:使用任意文本编辑器创建一个新的配置文件(例如 `syslog.conf`)。

   2. 配置 Syslog 输入插件:在配置文件中添加以下内容,以配置 Logstash 从 Syslog 中读取数据:

   ```yaml
   input {
     syslog {
       port => 514  # Syslog 默认的监听端口号为 514,请根据实际情况进行修改
       type => "syslog"
     }
   }
   ```

   这将配置 Logstash 使用 Syslog 输入插件监听默认的 Syslog 端口号(514),并使用 "syslog" 类型标记这些事件。

   3. 可选的过滤器和输出配置:根据您的需求,您可以添加额外的过滤器或输出插件来处理从 Syslog 读取的数据。根据您的具体需求进行相应的配置。

   4. 启动 Logstash:导航到 Logstash 的安装目录,并运行以下命令以启动 Logstash 并加载 Syslog 配置:

   ```bash
   bin/logstash -f path/to/syslog.conf
   ```

   请确保将 `path/to/syslog.conf` 替换为实际的配置文件路径。

启动 Logstash 后,它将监听来自 Syslog 的数据并进行处理。请确保 Logstash 能够接收 Syslog 数据,并且防火墙或网络配置允许 Logstash 与 Syslog 进行通信。如果您使用的是默认端口 514,请确保没有其他服务占用该端口。如有需要,可以修改 Logstash 配置文件中的端口设置来与 Syslog 配置一致。)

Redis:从redis service中读取(要使用Logstash从Redis中读取数据,您可以按照以下步骤设置Logstash配置:

   1. 安装Logstash和Redis插件:首先,确保已在系统上安装了Logstash,并在Logstash的安装目录 下运行以下命令安装Redis插件:

   ```
   bin/logstash-plugin install logstash-input-redis
   ```

   2. 创建Logstash配置文件:创建一个新的配置文件(例如`redis.conf`),并使用任意文本编辑器打开。

    3. 配置Redis输入插件:在配置文件中添加以下内容,以配置Logstash从Redis中读取数据:

   ```
   input {
     redis {
       host => "localhost"   # Redis主机地址,根据您的配置进行更改
       port => 6379          # Redis端口,根据您的配置进行更改
       data_type => "list"   # Redis数据类型,例如list、channel、pattern等
       key => "your_key"     # Redis数据键名,根据您的配置进行更改
     }
   }
   ```

   注意,这只是一个基本的配置示例,请根据您的Redis主机地址、端口、数据类型和键名进行相应的更改。

     4. 配置Logstash输出:根据您的需求,您可以添加其他输出插件(如Elasticsearch、文件输出)
Beats:从filebeat中读取(要使 Logstash 从其他主机的 Filebeat 读取数据,您需要进行以下配置:

1. 在 Filebeat 上配置 Logstash 输出:编辑 Filebeat 的配置文件(通常是 `filebeat.yml`)并添加 Logstash 输出的配置。确保将 `output.logstash.hosts` 设置为 Logstash 主机的 IP 地址或主机名,如下所示:

   ```yaml
   output.logstash:
     hosts: ["logstash_host:5044"]
   ```

   将 `logstash_host` 替换为实际的 Logstash 主机地址。确保配置中的端口号 `5044` 与 Logstash 监听的端口一致。

2. 在 Logstash 上配置 Filebeat 输入:创建一个新的 Logstash 配置文件(例如 `filebeat.conf`),并使用文本编辑器打开。在配置文件中添加以下内容:

   ```yaml
   input {
     beats {
       port => 5044 # 设置 Logstash 监听的端口与 Filebeat 配置中一致
     }
   }
   ```

   这将指示 Logstash 监听 Filebeat 发送的数据。

3. 可选的过滤器和输出配置:根据您的需求,您可以添加额外的过滤器或输出插件来处理从 Filebeat 读取的数据。根据您的具体需求进行相应的配置。

4. 启动 Logstash:导航到 Logstash 的安装目录并运行以下命令以启动 Logstash 并加载 Filebeat 配置:

   ```bash
   bin/logstash -f path/to/filebeat.conf
   ```

   请确保将 `path/to/filebeat.conf` 替换为实际的配置文件路径。

启动 Logstash 后,它将监听来自其他主机上 Filebeat 的数据,并根据配置进行处理。请确保 Logstash 能够访问其他主机上的 Filebeat,并且防火墙或网络配置允许 Logstash 与 Filebeat 进行通信)

2.3  FILETER

Grok:解析任意文本数据,Grok 是 Logstash 最重要的插件。它的主要作用就是将文本格式的字符串,转换成为具体的结构化的数据,配合正则表达式使用。
          官方提供的grok表达式:logstash-patterns-core/patterns at main · logstash-plugins/logstash-patterns-core · GitHub
          Grok在线调试:Grok Debugger
          Mutate:对字段进行转换。例如对字段进行删除、替换、修改、重命名等。
          Drop:丢弃一部分Events不进行处理。
          Clone:拷贝Event,这个过程中也可以添加或移除字段。
          Geoip:添加地理信息(为前台kibana图形化展示使用)

2.4  OUTPUTS

               Elasticsearch:可以高效的保存数据,并且能够方便和简单的进行查询。
          File:将Event数据保存到文件中。
          Graphite:将Event数据发送到图形化组件中,踏实一个当前较流行的开源存储图形化展示的组件。

3. kibana

日志可视化
        Grafana
    为Logstash和ElasticSearch在收集、存储的日志基础上进行分析时友好的Web界面,可以帮助汇总、分析和搜索重要数据日志。

三、架构类型

3.1 ELK

        es
        logstash
        kibana

3.2 ELKK

        es
        logstash
        kafka
        kibana

3.3 ELFK

        es
        logstash   重量级
                        占用系统资源较多
        filebeat    轻量级
                       占用系统资源较少
        kibana

3.4 ELFKK

        es
        logstash
        filebeat
        kafka
        kibana

3.5 EFK

        es
        logstash
        fluentd
        kafka
        kibana

四、案例

ELK日志收集系统集群实验

1.实验拓扑

2. 环境配置

设置各个主机的IP地址为拓扑中的静态IP,在两个节点中修改主机名为node1和node2并设置hosts文件

node1:

hostnamectl set-hostname node1

vim /etc/hosts

192.168.156.11  node1

192.168.156.12  node2

node2:

hostnamectl set-hostname node2

vim /etc/hosts

192.168.156.11  node1

192.168.156.12  node2

3.  安装node1与node2节点的elasticsearch

安装

 rpm -ivh elasticsearch-5.5.0.rpm

配置

node1:

vim /etc/elasticsearch/elasticsearch.yml

cluster.name:my-elk-cluster  //集群名称   

node.name:node1 //节点名字

path.data:/var/lib/elasticsearch  //数据存放路径

path.logs: /var/log/elasticsearch/  //日志存放路径

bootstrap.memory_lock:false //在启动的时候不锁定内存

network.host:192.168.56.11  //提供服务绑定的IP地址,0.0.0.0代表所有地址

http.port:9200 //侦听端口为9200

discovery.zen.ping.unicast.hosts:【"node1","node2"】 //群集发现通过单播实现

node2:

vim /etc/elasticsearch/elasticsearch.yml

cluster.name:my-elk-cluster  //集群名称   

node.name:node2 //节点名字

path.data:/var/lib/elasticsearch  //数据存放路径

path.logs: /var/log/elasticsearch/  //日志存放路径

bootstrap.memory_lock:false //在启动的时候不锁定内存

network.host:192.168.156.12  //提供服务绑定的IP地址,0.0.0.0代表所有地址

http.port:9200 //侦听端口为9200

discovery.zen.ping.unicast.hosts:【"node1","node2"】 //群集发现通过单播实现

启动elasticsearch服务

node1和node2

systemctl start elasticsearch

查看节点信息

http://192.168.156.11:9200

http://192.168.156.12:9200

查看集群健康状态:

http://192.168.115.3:9200/_cluster/health

Green 健康   yellow  警告    red  集群不可用,严重错误

4. 在node1安装elasticsearch-head插件

tar xf node-v8.2.1.tar.gz

cd node-v8.2.1

./configure && make && make install

等待安装完毕。

安装完毕后会生成命令:npm

拷贝命令

tar xf phantomjs-2.1.1-linux-x86_64.tar.bz2

cd phantomjs-2.1.1-linux-x86_64/bin

cp phantomjs  /usr/local/bin

安装elasticsearch-head

tar xf elasticsearch-head.tar.gz

cd elasticsearch-head

npm install

修改elasticsearch配置文件

vim /etc/elasticsearch/elasticsearch.yml

添加   http.cors.enabled: true  //开启跨域访问支持,默认为false

          http.cors.allow-origin: "*"  //跨域访问允许的域名地址

启动elasticsearch-head

cd elasticsearch-head

npm run start &

查看监听: netstat -anput | grep :9100

访问:

http://192.168.156.11:9100

测试

在node1的终端中输入:

curl  -XPUT  'localhost:9200/index-demo/test/1?pretty&pretty' -H  'Content-Type: application/json' -d '{"user":"zhangsan","mesg":"hello world"}'

刷新浏览器可以看到对应信息即可

node1服务器安装logstash

rpm -ivh logstash-5.5.1.rpm

systemctl start logstash.service

In -s /usr/share/logstash/bin/logstash  /usr/local/bin/

测试1: 标准输入与输出

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

测试2: 使用rubydebug解码

logstash -e 'input { stdin{} } output { stdout{ codec=>rubydebug }}'

测试3:输出到elasticsearch

  查看结果:

http://192.168.156.11:9100

logstash日志收集文件格式

Logstash配置文件基本由三部分组成:input、output以及 filter(根据需要)。标准的配置文件格式如下:

input (...)  输入

filter {...}   过滤

output {...}  输出

在每个部分中,也可以指定多个访问方式。例如,若要指定两个日志来源文件,则格式如下:

input {

file{path =>"/var/log/messages" type =>"syslog"}

file { path =>"/var/log/apache/access.log"  type =>"apache"}

}

案例:通过logstash收集系统信息日志

chmod o+r /var/log/messages

vim /etc/logstash/conf.d/system.conf

    input {

    file{

    path =>"/var/log/messages" 

    type => "system"

    start_position => "beginning"

    }

    }

    output {

    elasticsearch{

    hosts =>["192.168.1.1:9200"]

    index => "system-%{+YYYY.MM.dd}"

    }

    }

重启日志服务: systemctl restart logstash

查看日志: http://192.168.156.11:9100

node1节点安装kibana

rpm -ivh kibana-5.5.1-x86_64.rpm

配置kibana

vim /etc/kibana/kibana.yml

server.port:5601  //Kibana打开的端口

server.host:"0.0.0.0" //Kibana侦听的地址

elasticsearch.url: "http://192.168.8.134:9200"  

//和Elasticsearch 建立连接

kibana.index:".kibana"  //在Elasticsearch中添加.kibana索引

启动kibana

systemctl start kibana

访问kibana :

http://192.168.156.11:5601

首次访问需要添加索引,我们添加前面已经添加过的索引:system-*

企业案例:

收集httpd访问日志信息

在httpd服务器上安装logstash,参数上述安装过程,可以不进行测试

logstash在httpd服务器上作为agent(代理),不需要启动

编写httpd日志收集配置文件

vim /etc/logstash/conf.d/httpd.conf

input {

file{

path=>"/var/log/httpd/access_log" //收集Apache访问日志

type => "access" //类型指定为 access

start_position => "beginning" //从开始处收集

}

output{

elasticsearch {

hosts =>["192.168.156.11:9200"] // elasticsearch 监听地址及端口

index =>"httpd_access-%{+YYYY.MM.dd}" //指定索引格式

}

}

使用logstash命令导入配置:

logstash -f  /etc/logstash/conf.d/httpd.conf

使用kibana查看即可! http://192.168.156.11:5601   查看时在mangement选项卡创建索引httpd_access-*  即可!

 

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

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

相关文章

VScode远程连接主机

一、前期准备 1、Windows安装VSCode&#xff1b; 2、在VSCode中安装PHP Debug插件&#xff1b; 3、安装好Docker 4、在容器中安装Xdebug ①写一个展现phpinfo的php文件 <?php phpinfo(); ?>②在浏览器上打开该文件 ③复制所有信息丢到Xdebug: Installation instr…

【C进阶】深度剖析数据在内存中的存储

目录 一、数据类型的介绍 1.类型的意义&#xff1a; 2.类型的基本分类 二、整形在内存中的存储 1.原码 反码 补码 2.大小端介绍 3.练习 三、浮点型在内存中的存储 1.一个例子 2.浮点数存储规则 一、数据类型的介绍 前面我们已经学习了基本的内置类型以及他们所占存储…

封装(个人学习笔记黑马学习)

1、格式 #include <iostream> using namespace std;const double PI 3.14;//设计一个圆类&#xff0c;求圆的周长 class Circle {//访问权限//公共权限 public://属性//半径int m_r;//行为//获取圆的周长double calculateZC() {return 2 * PI * m_r;} };int main() {//通…

Linux 学习笔记(1)——系统基本配置与开关机命令

目录 0、起步 0-1&#xff09;命令使用指引 0-2&#xff09;查看历史的命令记录 0-3&#xff09;清空窗口内容 0-4&#xff09;获取本机的内网 IP 地址 0-5&#xff09;获取本机的公网ip地址 0-6&#xff09;在window的命令行窗口中远程连接linux 0-7&#xff09;修改系…

VScode 国内下载源 以及 nvm版本控制器下载与使用

VScode 国内下载源 进入官网 https://code.visualstudio.com/ 点击下载 复制下载链接到新的浏览器标签 将地址中的/stable前的az764295.vo.msecnd.net换成vscode.cdn.azure.cn&#xff0c;再回车就会直接在下载列表啦。 参考大神博客 2.使用nvm 对 node 和npm进行版本控制…

ARM编程模型-内存空间和数据

ARM属于RISC体系&#xff0c;许多指令单周期指令&#xff0c;是32位读取/存储架构&#xff0c;对内存访问是32位&#xff0c;Load and store的架构&#xff0c;只有寄存器对内存&#xff0c;不能内存对内存存储&#xff0c;CPU通过寄存器对内存进行读写操作。 ARM的寻址空间是线…

go Session的实现(一)

〇、前言 众所周知&#xff0c;http协议是无状态的&#xff0c;这对于服务器确认是哪一个客户端在发请求是不可能的&#xff0c;因此为了能确认到&#xff0c;通常方法是让客户端发送请求时带上身份信息。容易想到的方法就是客户端在提交信息时&#xff0c;带上自己的账户和密…

17.看楼房

目录 Description Input Output Notes 思路 注意事项 C完整代码&#xff08;含详细注释&#xff09; Description 小张在暑假时间进行了暑期社会调查。调查的内容是楼房的颜色如何影响人们的心情。于是他找到了一个楼房从左到右排成一排的小区&#xff0c;这个小区一共有…

51单片机项目(7)——基于51单片机的温湿度测量仿真

本次做的设计&#xff0c;是利用DHT11传感器&#xff0c;测量环境的温度以及湿度&#xff0c;同时具备温度报警的功能&#xff1a;利用两个按键&#xff0c;设置温度阈值的加和减&#xff0c;当所测温度大于温度阈值的时候&#xff0c;蜂鸣器就会响起&#xff0c;进行报警提示。…

安卓 tcp 客户端

安卓 tcp 客户端 Server:8888 是Qt 写的Tcp 服务器 ip 是 192.168.2.103 port是8888 安卓手机运行 kotlin 语法的Tcp Client &#xff0c;连接&#xff0c;收发数据 效果如下图 Tcpclient package com.example.myapplicationimport android.os.Handler import android.os.Loo…

【leetcode 力扣刷题】数学题之计算次幂//次方:快速幂

利用乘法求解次幂问题—快速幂 50. Pow(x, n)372. 超级次方 50. Pow(x, n) 题目链接&#xff1a;50. Pow(x, n) 题目内容&#xff1a; 题目就是要求我们去实现计算x的n次方的功能函数&#xff0c;类似c的power()函数。但是我们不能使用power()函数直接得到答案&#xff0c;那…

ARM Cortex-M 的 SP

文章目录 1、栈2、栈操作3、Cortex-M中的栈4、MDK中的SP操作流程5、Micro-Lib的SP差别1. 使用 Micro-Lib2. 未使用 Micro-Lib 在嵌入式开发中&#xff0c;堆栈是一个很基础&#xff0c;同时也是非常重要的名词&#xff0c;堆栈可分为堆 (Heap) 和栈 (Stack) 。 栈(Stack): 一种…

EG1164大功率同步整流升压模块开源,最高效率97%

EG1164大功率同步整流Boost升压电源模块&#xff0c;最高效率97%&#xff0c;输入电压8~50V&#xff0c;输出电压8~60V可调&#xff0c;最大功率300瓦以上&#xff0c;开关频率219kHz。 白嫖了张嘉立创的彩色丝印券就随便画了个板试试&#xff0c;第一次打彩色丝印。 因为我测…

flutter plugins插件【一】【FlutterJsonBeanFactory】

1、FlutterJsonBeanFactory 在Setting->Tools->FlutterJsonBeanFactory里边自定义实体类的后缀&#xff0c;默认是entity 复制json到粘贴板&#xff0c;右键自己要存放实体的目录&#xff0c;可以看到JsonToDartBeanAction Class Name是实体名字&#xff0c;会默认加上…

基于硬件隔离增强risc-v调试安全1_问题描述

安全之安全(security)博客目录导读 2023 RISC-V中国峰会 安全相关议题汇总 说明&#xff1a;本文参考RISC-V 2023中国峰会如下议题&#xff0c;版权归原作者所有。

每日一题 2511. 最多可以摧毁的敌人城堡数目

难度&#xff1a;简单 翻译&#xff1a;寻找距离最远的 1 和 -1 的组合&#xff0c;要求它们之间只有0 class Solution:def captureForts(self, forts: List[int]) -> int:res, t 0, -1for i, fort in enumerate(forts):if fort -1 or fort 1:if t > 0 and fort ! f…

前端Vue自定义得分构成水平柱形图组件 可用于系统专业门类得分评估分析

引入Vue自定义得分构成水平柱形图组件&#xff1a;cc-horBarChart 随着技术的发展&#xff0c;传统的开发方式使得系统的复杂度越来越高&#xff0c;一个小小的改动或小功能的增加可能会导致整体逻辑的修改&#xff0c;造成牵一发而动全身的情况。为了解决这个问题&#xff0c…

扫盲:常用NoSQL数据库

前言 关系型数据库产品很多&#xff0c;如 MySQL、Oracle、Microsoft SQL Sever 等&#xff0c;但它们的基本模型都是关系型数据模型。 非关系型数据库又称为&#xff1a;NoSQL &#xff0c;没有统一的模型&#xff0c;而且是非关系型的。 常见的 NoSQL 数据库包括键值数据库、…

【前端】Vue2 脚手架模块化开发 -快速入门

&#x1f384;欢迎来到边境矢梦的csdn博文&#x1f384; &#x1f384;本文主要梳理Vue2 脚手架模块化开发 &#x1f384; &#x1f308;我是边境矢梦&#xff0c;一个正在为秋招和算法竞赛做准备的学生&#x1f308; &#x1f386;喜欢的朋友可以关注一下&#x1faf0;&#x…

【MATLAB第70期】基于MATLAB的LightGbm(LGBM)梯度增强决策树多输入单输出回归预测及多分类预测模型(全网首发)

【MATLAB第70期】基于MATLAB的LightGbm(LGBM)梯度增强决策树多输入单输出回归预测及多分类预测模型&#xff08;全网首发&#xff09; 一、学习资料 (LGBM)是一种基于梯度增强决策树(GBDT)算法。 本次研究三个内容&#xff0c;分别是回归预测&#xff0c;二分类预测和多分类预…