计算机系统应用教程网站

网站首页 > 技术文章 正文

CentOS7 搭建ELK日志分析系统过程

btikc 2024-10-18 04:50:50 技术文章 10 ℃ 0 评论

ELK简介

ELK是什么?

elk是三个开源软件的缩写,分别是:Elasticsearch、Logstash、Kibana 。由于Logstash 客户端太占用资源,对服务器的要求比较高,后来FileBeat出现了 ,解决了资源问题,官方也推荐这个工具。

Elasticsearch:实时全文搜索和分析引擎,提供搜集、分析、存储数据三大功能

Logstash:日志收集,分析,过滤并转化到对应的存储库

Kibana:一个基于Web的图形界面,用于搜索、分析和可视化存储在 Elasticsearch指标中的日志数据

Filebeat:监控日志文件、转发。 需要收集数据的服务器端需要安装这个

架构图



如上图你可以看出来,FileBeat 将数据 通过队列 发给 Logstash ,然后Logstash 在将数据给 Elasticsearch 存储。kibana结合nginx 提供web界面

环境准备



准备工作

设置官方源

## 下载并安装公共签名密钥rpm --import  https://artifacts.elastic.co/GPG-KEY-elasticsearch ## 设置repo内容vim    /etc/yum.repos.d/elasticsearch.repo ## 在repo中添加如下内容[elasticsearch-6.x]name=Elasticsearch repository for 6.x packagesbaseurl=https://artifacts.elastic.co/packages/6.x/yumgpgcheck=1gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearchenabled=1autorefresh=1type=rpm-md

Java环境安装

elasticsearch 需要java环境支持,执行如下命令

## 安装java 环境yum install java -y## 验证是否安装好java -version

Elasticsearch 安装和配置

安装

yum -y install elasticsearch##设置为自启动systemctl enable elasticsearch

配置

配置文件路径:/etc/elasticsearch/elasticsearch.yml

核心参数

## 集群名字cluster.name: app-log## 节点名字node.name: node-1## 数据存放地址path.data: /data1/es/data## 日志文件地址(可不修改)path.logs: /var/log/elasticsearch

命令介绍

## 启动service elasticsearch {start|restart|reload} ## 停止service elasticsearch stop

验证

curl -X GET http://localhost:9200 输出结果如下{  "name" : "node-1",  "cluster_name" : "app-log",  "cluster_uuid" : "oVk4kUzKTCOsc2zaViOMXA",  "version" : {    "number" : "6.8.13",    "build_flavor" : "default",    "build_type" : "rpm",    "build_hash" : "be13c69",    "build_date" : "2020-10-16T09:09:46.555371Z",    "build_snapshot" : false,    "lucene_version" : "7.7.3",    "minimum_wire_compatibility_version" : "5.6.0",    "minimum_index_compatibility_version" : "5.0.0"  },  "tagline" : "You Know, for Search"}

Logstash 安装

安装

yum -y install logstash## 自启动systemctl enable logstash

配置放在后面讲,和FileBeat一起讲更容易理解

Kibana 安装和配置

安装

yum -y install kibana nginx## 设置自动启systemctl enable kibana

命令介绍

## 启动service kibana {start|restart|reload} ## 停止service kibana stop

nginx 配置

server {    listen       80;    server_name  log.corp.jixuejima.cn;    location / {        proxy_pass http://localhost:5601;        proxy_http_version 1.1;        proxy_set_header Upgrade $http_upgrade;        proxy_set_header Connection 'upgrade';        proxy_set_header Host $host;        proxy_cache_bypass $http_upgrade;    }}

效果图


Redis安装和配置

由于我使用的是阿里云redis服务,这个可以直接用

FileBeat 安装和配置

安装

yum  -y install  filebeat ## 设置自启动systemctl enable filebeat

配置

配置路径:/etc/filebeat/filebeat.yml

filebeat.inputs:- type: log  enabled: true  paths:    - /xxxx/dispatch.log  fields:    log_source: jobs  output.redis:  hosts: ["xxxxxyyyyyzzzz.redis.rds.aliyuncs.com"]  port: 6379  db: 2  timeout: 5  key: "logstash_list"  processors:  - add_host_metadata: ~  - add_cloud_metadata: ~


注解:FileBeat 是转发日志内容到指定的管道对象(这里使用的是阿里云的redis),其中需要注意的是 log_source 这个是我自定义的日志来源,方便后面Logstash进行日志处理。上面的配置就是讲 日志 放到 redis队列中,队列叫做:logstash_list

命令介绍

## 启动service filebeat {start|restart|reload} ## 停止service filebeat stop

Logstash 配置

配置

前面说过,关于Logstash的配置放到FileBeat安装之后,这个没有先后顺序,只是方便大家理解 才专门单独放到后面讲解。FileBeat 将 日志放到了redis中。那么Logstash就要从redis中取出数据。

配置路径:/etc/logstash/conf.d/log.conf

input {  redis {    data_type => "list"    key => "logstash_list"    host => "xxxxxyyyyyzzzz.redis.rds.aliyuncs.com"    port => 6379    db => 2  }} filter {     if "cleared" in [message] or "运行时间未到" in [message] or "DEBUG 运行命令" in [message] {       ### 丢弃       drop{}    }        if "yii queue" in [message] and "start" in [message] {       drop{}    }            if "jobs" == [fields][log_source] {          grok {            match =>{              "message" => "job_id:%{NUMBER:job_id}"            }        }        }                    mutate {      remove_field => ["@version","[beat][name]","[beat][hostname]","[beat][version]","[host][architecture]","[host][containerized]","[host][id]","[host][os][codename]","[host][os][family]","[host][os][name]","[host][os][platform]","[host][os][version]","[meta][cloud][provider]","[prospector][type]","[log][file][path]","[input][type]","[meta][cloud][region]","http_version"]    } } output {   if "jobs" == [fields][log_source] {    elasticsearch {       hosts => ["localhost:9200"]       index => "jobs-%{+YYYY.MM.dd}"    }  }}


注解:

  • 上面的input配置的和FileBeat同一个Redis配置,说明从Redis获取数据。
  • filter 区域表示过滤处理,上面是根据我自己的业务进行日志丢弃(因为有些日志记录是没有意义的)。根据来源进行 数据匹配 然后单独存储更改值( 如下图,将message字段中的job_id 单独提取作为一个字段 )
  • filter 中的 mutate 配置了删除一些字段,有些字段都一样,存在没意义,减少存储日志量


  • output 配置中 判断来源,然后设置存储在Elasticsearch 中并且索引规则按照定义好的生成(如下图)

命令介绍

## 启动service logstash {start|restart|reload} ## 停止service logstash stop

技巧

Kibana界面设置成中文?

配置路径:/etc/kibana/kibana.yml

## 改成如下 然后重启Kibanai18n.locale: "zh-CN"

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表