简单搭建一套ELK日志分析

发布于 2022-02-18  150 次阅读


ELK指的是Elasticsearch、Logstash、Kibana,这三者是核心套件,但并非全部。

  • Logstash : 是一个用来搜集、分析、过滤日志的工具。 它支持几乎任何类型的日志,包括系统日志、错误日志和自定义应用程序日志。 它可以从许多来源接收日志,这些来源包括 syslog、消息传递(例如 RabbitMQ)和JMX,它能够以多种方式输出数据,包括电子邮件、websockets和Elasticsearch。
  • Elasticsearch: 是实时全文搜索和分析引擎,提供搜集、分析、存储数据三大功能; 是一套开放REST和JAVA API等结构提供高效搜索功能,可扩展的分布式系统。 它构建于Apache Lucene搜索引擎库之上。
  • Kibana: 一个基于Web的图形界面,用于搜索、分析和可视化存储在 Elasticsearch指标中的日志数据。 它利用Elasticsearch的REST接口来检索数据,不仅允许用户创建他们自己的数据的定制仪表板视图,还允许他们以特殊的方式查询和过滤数据。
  • Beats :
    轻量型采集器的平台,从边缘机器向 Logstash 和 Elasticsearch 发送数据。(本次未使用)

filebeat是Beats中的一员。是用于转发和集中日志数据的轻量级传送工具。Filebeat监视您指定的日志文件或位置,收集日志事件,并将它们转发到Elasticsearch或 Logstash进行索引。

Input:输入,输出数据可以是Stdin、File、TCP、Redis、Syslog等。

Filter:过滤,将日志格式化。有丰富的过滤插件:Grok正则捕获、Date时间处理、Json编解码、Mutate数据修改等。

Output:输出,输出目标可以是Stdout、File、TCP、Redis、ES等。

  • ogstash 和 beats的关系

好多人都觉得beats出来是用来替代logstash的。实际上并不是,beats只是用来优化logstash的,因为logstash消耗的性能比较多。如果只是单纯的为了收集日志,使用logstash就有点大材小用了,另外有点浪费资源。而beats是轻量级的用来收集日志的。

而logstash更加专注一件事,那就是数据转换,格式化,等处理工作。比方说,日志数据是一行一行的非格式化的数据,想要存在elasticsearch就要有一定的结构。logstash就可以做这件事。

beats是可以直接对接elasticsearch的,只不过数据不能适配,只能做一些简单的处理

logstash对接es,也可以对接其它的

比较完整的就是:beats 对logstash 进行数据适配,然后推到es 做检索。

基本概念

Node:运行单个ES实例的服务器 Cluster:一个或多个节点构成集群 Index:索引是多个文档的集合 Document:Index里每条记录称为Document,若干文档构建一个Index Type:一个Index可以定义一种或多种类型,将Document逻辑分组 Field:ES存储的最小单元 Shards:ES将Index分为若干份,每一份就是一个分片 Replicas:Index的一份或多份副本 ES 关系型数据库(比如Mysql)

ES

关系型数据库(比如Mysql)

Index

Database

Type

Table

Document

Row

Field

Column

准备环境

本次只是搭建了个单体环境,非集群。

需要安装:elasticsearch、logstash、Kibana、java

  • 安装java

我相信你已经安装好了java,而且现在都会内置java,可以手动指定。

elasticsearch与Kibana下载地址:https://www.elastic.co/cn/start

logstash下载地址:https://www.elastic.co/cn/downloads/logstash

下载下来之后解压出来

linux用tar -zxvf解压出来,然后修改参数

Elasticsearch的安装使用

elasticsearch不能用root用户启动,所以新建一个用户

useradd -d /home/elk -m elk

切换至elk用户

su - elk

修改elasticsearch配置文件elasticsearch-7.16.2/config/elasticsearch.yml

配置并设置节点名称
node.name: node-1
修改data存放的路径
path.data: /usr/elk/data
修改log存放的路径
path.logs: /usr/elk/logs
监听的网络地址
network.host: 192.168.80.241
监听的端口
http.port: 9200
列出首次选举中符合主机资格的节点 单机就自己
cluster.initial_master_nodes: ["node-1"]

创建存放log与data的目录

mkdir /usr/elk/data
mkdir /usr/elk/logs

授予权限

chown -R elk:elk /usr/elk/data

然后就可以启动试试看了

启动bin目录下的脚本elasticsearch

./elasticsearch -d

访问下服务看看启动成功了没有

curl http://192.168.80.241:9200/

这样就算启动成功了

LogStash的安装使用

在/usr/local/logstash-7.16.2/config下添加elk.conf文件

配置文件官方指南

https://www.elastic.co/guide/en/logstash/current/configuration.html

配置文件的结构为

input {
  ...
}

filter {
  ...
}

output {
  ...
}

input、filter、output插件的配置可以参考官方:

Input Plugins Output Plugins Filter Plugins

这里也可以配置filebeat,但是我不配。

最终我的配置文件为

input {
    file {
        path => "/usr/local/apache-tomcat-8.5.63/logs/*.log"
        type => "tomcat"
        start_position => "beginning"
    }

    file {
        path => "/usr/local/apache-tomcat-8.5.63/logs/datamaintenance-log/*.log"
        type => "datamaintenance"
        start_position => "beginning"
    }

    file {
        path => "/usr/local/apache-tomcat-8.5.63/logs/cloud/*.log"
        type => "cloud"
        start_position => "beginning"
    }

    file {
        path => "/usr/local/apache-tomcat-8.5.63/logs/feedback-cloud/*.log"
        type => "cloud"
        start_position => "beginning"
    }
}

output {

    if [type] == "tomcat" {

        elasticsearch {
            hosts => ["192.168.80.241:9200"]
            index => "nagios-tomcat-%{+YYYY.MM.dd}"
        }
    }

    if [type] == "datamaintenance" {

        elasticsearch {
            hosts => ["192.168.80.241:9200"]
            index => "nagios-datamaintenance-%{+YYYY.MM.dd}"
        }
    }

    if [type] == "cloud" {

        elasticsearch {
            hosts => ["192.168.80.241:9200"]
            index => "nagios-cloud-%{+YYYY.MM.dd}"
        }
    }

    if [type] == "feedback-cloud" {

        elasticsearch {
            hosts => ["192.168.80.241:9200"]
            index => "nagios-feedback-cloud-%{+YYYY.MM.dd}"
        }
    }
}

配置没问题了就可以启动了,以后台的方式启动,日志输出到nohup.log中

nohup ./logstash -f ../config/elk.conf -w 8 -b 1000 > /usr/local/logstash-7.16.2/bin/nohup.log 2>&1 &

Kibana的安装及使用

在/usr/local/kibana-7.16.2-linux-x86_64/config下修改配置文件kibana.yml

server.port: 5601
server.host: "192.168.80.241"
elasticsearch.hosts: ["http://192.168.80.241:9200"]
kibana.index: ".kibana"
i18n.locale: "zh-CN"

之后启动

nohup ./kibana &

等待一会儿后查看服务是否正常

直接在浏览器里访问

http://192.168.80.241:5601

至此,搭建就算完成了。


啦啦啦!