分布式日志系统搭建-ELK(1)

二次信任 提交于 2020-01-27 04:14:40

需求分析

           日志是作为线上系统排错的关键,通常我们在本机代码调试的时候,错误会直接打印在控制台上,因此我们才能进行错误的判断。当系统运行在线上的时候,如果单纯的通过捕获异常 ,使用**e.printStackTrace()**进行打印肯定是不行的。因为其他的运行信息或者异常也会将打印的信息给顶掉。
           这个时候我们就需要引入日志系统了,这里就不在赘述如何打印日志了。
           上述这种情况是在单机版的情况下正常运行,这个时候我们的日志是可以正常的进行查看。但是,当我们开始做分布式,做微服务的时候,单机版的日志系统对于这种情况就不适用了。、
           此时此刻,日志记录在多个服务器的log文件当中,而对于我们来说排错就变得异常困难了。因为一个服务可能做了集群之后,生成的日志文件还需要去查看在哪个服务器,对于开发的排错来说大大降低了效率。
           显然,此时此刻我们需要一个分布式的日志管理系统,对所有的日志进行统一的管理。
           分布式日志系统ELK是指Elasticsearch+Logstash+Kibana。Elasticsearch是一个开源的全文检索工具用于日志存储,Logstash是一个日志收集工具。Kibana用于日志查询与展示。下面是系统简单架构图。Elk的系统架构图
            ELK的架构体系十分的简单,首先Logstash通过读取数据源中的数据,进行过滤,然后在输出到ElasticSearch当中去。接着使用Kibbna进行日志的查看。
           Logstash的数据源及输出源是多种多样的,数据源可以有Redis,日志文件,数据库等,输出源也一样。在这里我们以文件为案列进行讲解。

环境准备

软件 版本
elasticsearch 6.7.0
kibana- 6.7.0
logstash 6.7.0

注意:这里使用的所有版本都是Windows系统下的,并非Linux系统。

ElasticSearch启动

           在解压缩后的elasticsearch-6.7.0目录下找到bin/elasticsearch.bat双击启动即可,无需改动任何配置。如遭遇到内存大小不够等其他原因可自行百度解决。
启动成功案列
           可以访问http://localhost:9200/,出现下列JSON代表启动成功!

{
  "name" : "MjlzdTX",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "EgG3WpR8QxqVrGqidCbB-A",
  "version" : {
    "number" : "6.7.0",
    "build_flavor" : "default",
    "build_type" : "zip",
    "build_hash" : "8453f77",
    "build_date" : "2019-03-21T15:32:29.844721Z",
    "build_snapshot" : false,
    "lucene_version" : "7.7.0",
    "minimum_wire_compatibility_version" : "5.6.0",
    "minimum_index_compatibility_version" : "5.0.0"
  },
  "tagline" : "You Know, for Search"
}

Kibana启动

           在启动Kibana之前,需要修改yml文件,选择你需要监听的ElasticSearch的端口号。
           打开kibana-6.7.0-windows-x86_64\config下的kibana.yml文件,找到下面这段代码取消注释。

# The URLs of the Elasticsearch instances to use for all your queries.
elasticsearch.hosts: "http://localhost:9200"

           修改完成后只需要访问kibana-6.7.0-windows-x86_64\bin下的kibana.bat文件,双击启动。
在这里插入图片描述
接着访问http://localhost:5601,如果进入下面页面代表启动成功
在这里插入图片描述

Logstash启动

这里以https://grouplens.org/datasets/movielens/的
文件

文件为例子,点击下载存放到自己的磁盘当中去。
在logstash-6.7.0\bin的目录下新建一个conf文件,命名为stdin.conf文件。文件内容如下:

input {
  file {
    path => ["F:/data/ml-latest-small/movies.csv"]
    start_position => "beginning"
    sincedb_path => "nul"
  }
}

filter {
  csv {
    separator => ","
    columns => ["id","content","genre"]
  }

  mutate {
    split => { "genre" => "|" }
    remove_field => ["path", "host","@timestamp","message"]
  }

  mutate {

    split => ["content", "("]
    add_field => { "title" => "%{[content][0]}"}
    add_field => { "year" => "%{[content][1]}"}
  }


  mutate {
    convert => {
      "year" => "integer"
    }
    strip => ["title"]
    remove_field => ["path", "host","@timestamp","message","content"]
  }


}

output {
   elasticsearch {
     hosts => "http://localhost:9200"
     index => "movies"
     document_id => "%{id}"
   }
  stdout {}
}

input为之前所讲述的数据源,file/path为文件路径。修改为刚才所下载的csv文件所在地址。output为输出源,filter为你要存储在ElasticSearch中的格式,这里放在后面在赘述,先以环境的搭建为主。
注意,我在这里的index是

index => “movies”
如果使用的是我的elk软件包,最好重命名一下,索引名随意

在你的logstash-6.7.0\bin目录下启动cmd命令,输入以下指令

logstash -f stdin.conf

启动成功后
在这里插入图片描述

Kibana查看

打开之前登陆的Kibana页面,找到管理的索引模式,创建刚才的索引(movies)。在这里插入图片描述
接着就可以在这里查看刚才所插入的信息
在这里插入图片描述
当然你也可以通过下面的开发者工具使用Es的命令进行搜索。

小结

elk的整体搭建其实并不是很困难,按着步骤就能走下来。这篇文章主要是为了初学者进行elk的搭建,后续会讲如何对日志进行处理。 以及elk+redis+filebeat进行更深度的优化。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!