ELK日志系统(单机版)搭建过程

2,815 阅读5分钟

为什么要搭建日志系统

线上环境发生故障时,工程师需要连接到生产环境服务器,使用各种日志查询命令 tail、cat、sed 、grep等定位故障问题。而在微服务架构下通常一个服务会部署多个实例,那就需要到每个日志目录下去查找日志文件,每个应用实例通常会设置日志滚动策略(按照日期每天一个日志文件)。此类繁琐的工作大大降低了排查问题的效率。于是乎,要解决这个问题,就需要有一套智能化的日志系统,它能够将这些日志管理起来并提供检索功能,帮助工程师及时排查故障,解决这些痛点。因此诞生了ELK日志系统。

什么是ELK

ELK是elastic公司提供的一套从日志收集--存储--展示的完整解决方案,是三个产品的首字母缩写,分别是ElasticSearch、Logstash 和 Kibana。

ElasticSearch

Elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎,能够解决不断涌现出的各种用例。它是一个建立在全文搜索引擎Apache Lucene基础上搜索引擎,使用Java语言编写。并且作为elk的核心,集中存储数据。

Logstash

Logstash 是免费且开放的服务器端数据处理管道,能够从多个来源采集数据,转换数据,然后将数据发送到指定的“存储库”中。

Kibana

通过 Kibana,可以对 Elasticsearch 进行可视化,还可以在 Elastic Stack 中进行导航,这样便可以进行各种操作,从跟踪查询负载,到理解请求如何流经整个应用,都能轻松完成。

安装与启动

首先需要有一个服务器,本文以linux服务器的搭建为例。elk需要java环境,默认已安装。

下载地址

elk三个产品均可以在官网下载。

官网:www.elastic.co/cn/download…

安装ElasticSearch

  1. 使用wget命令下载 eg: wget artifacts.elastic.co/downloads/e…

  2. 下载完成之后解压 tar -zxvf elasticsearch-7.5.1-linux-x86_64.tar.gz

  3. 解压完成删除安装文件 rm -rf elasticsearch-7.5.1-linux-x86_64.tar.gz

启动ElasticSearch

  1. 进入es安装目录config文件夹 cd elasticsearch-7.5.1/config

  2. 编辑配置文件 vim elasticsearch.yml 更改如下信息:

    cluster.name: dh-elasticsearch  #集群名字
    node.name: node-1 #节点名称
    path.data: /opt/elasticsearch-7.5.1/data  #data存放路径
    path.logs: /opt/elasticsearch-7.5.1/logs  #日志存放路径
    network.host: 0.0.0.0 #监听网络地址
    http.port: 9200 #端口
    http.cors.enabled: true #跨域
    http.cors.allow-origin: "*" 
    

    这里有个东西要注意,root用户不能直接启动elasticseach,需要新建一个用户,用新建立的用户去启动es。

    1. linux创建新用户 adduser yezi
    2. 给新建用户yezi设置密码 passwd yezi 密码(需要输入2次)
    3. 给新建用户yezi对应权限 chown -R yezi /opt/elasticsearch-7.5.1
    4. 切换到新建用户下,执行启动命令
  3. 启动es 进入bin目录,es启动命令: ./elasticsearch -d (-d表示后台启动)

访问ElasticSearch

在浏览器输入 http://192.168.18.244:9200/

获得如下信息:

以上表示linux下单机es搭建完成

安装Kibana

  1. 使用wget命令下载 eg: wget artifacts.elastic.co/downloads/k…

  2. 下载完成之后解压 tar -zxvf kibana-7.5.1-linux-x86_64.tar.gz

  3. 解压完成删除安装文件 rm -rf kibana-7.5.1-linux-x86_64.tar.gz

启动Kibana

  1. 进去kibana配置文件夹 cd kibana-7.5.1/config/

  2. 编辑kibana.yml配置文件 vim kibana.yml 输入如下信息

    server.port: 5601 #端口
    server.host: "0.0.0.0" #允许所有外部访问
    server.name: "yezi" #服务名称
    elasticsearch.hosts: ["http://192.168.18.244:9200"] #所有查询所使用的es实例
    i18n.locale: "zh-CN" #界面语言显示为中文
    
  3. cd 进入bin目录,启动命令: sh kibana &

访问Kibana

在浏览器输入 http://192.168.18.244:5601

获得如下信息:

以上Kibana启动成功

安装Logstash

  1. 使用wget命令下载 eg: wget artifacts.elastic.co/downloads/l…

  2. 下载完成之后解压 tar -zxvf logstash-7.5.1.tar.gz

  3. 解压完成删除安装文件 rm -rf logstash-7.5.1.tar.gz

启动Logstash

  1. 进入logstash配置文件目录 cd logstash-7.5.1/config/

  2. 编辑logstash.yml配置文件 vim logstash.yml

    node.name: yezi    #设置节点名称,一般写主机名
    path.data: /usr/local/logstash/plugin-data    #创建logstash 和插件使用的持久化目录
    config.reload.automatic: true    #开启配置文件自动加载
    config.reload.interval: 10    #定义配置文件重载时间周期
    http.host: "127.0.0.1"    #定义访问主机名,一般为域名或IP
    
  3. 进入bin 目录,新建文件 vim logstashyezi.conf 输入如下

    input {
        file {
            path => "/home/denghua/mysql/yezi.log"
            type => "yezim"
            start_position => beginning
        }
    }
    filter {
    
    }
    output {
        elasticsearch {
        hosts => "localhost:9200"
        index => "es-message-%{+YYYY.MM.dd}"
        }
        stdout{codec => rubydebug}
    }
    

    input:数据来源,本文以新建的一个log文件为例

    • path:来源日志文件路径
    • type:日志分类
    • start_position: 数据读取点,一般从开始读取

    out: 数据流向,本文以elk搭建为主,所以数据输送到elasticsearch

    • hosts:es地址
    • index:目标索引
    • stdout:标准输入
  4. 启动logstash,启动命令 sh logstash -f logstashyezi.config &

    • 如果提示--pathdata问题

    • 变更启动命令 sh logstash -f logstashyezi.config --path.data=/home/denghua/mysql &

    • --pathdata可以自己指定

  5. 进入log目录,输入tail命令查看日志,显示如下:

以上代表logstash启动成功!

此时如果有日志数据写入yezi.log文件,我们就可以在kibana上看到有logstash推送到elasticsearch的数据了!

下面逗来测试一哈

测试

由于我们的日志来源是我们自己创建的yezi.log文件,所以我们选择手动模拟输入测试

  1. 进入kibana,选择左边工具栏第一个按钮Discover,如下图

  2. 筛选处更改索引为我们自己设定的索引,由于我们在logstash中输入elasticsearch时设定的index格式为 es-message-%{+YYYY.MM.dd},所以在更改处将匹配模式设定为 es-message*

  3. 右上可以筛选时间格式,如:当前选择的是15分钟以前至now当前

  4. 切换到linux服务器下我们设定的logstash日志来源目录 cd /home/denghua/mysql/

  5. 手动模拟日志输入 echo "模拟输入" > yezi.log

  6. 然后再回到第1步kibana面板点击右上角刷新按钮 获得如下所示

    在此看到我们手动模拟输入的日志 “模拟输入” 已经显示在页面当中。

    至此单机版本ELK就搭建完成。

    另外中间筛选面板可以根据字段进行检索,可以另行探索。