简介

  • “ELK”是三个开源项目的首字母缩写,这三个项目分别是:Elasticsearch、Logstash 和 Kibana。
  • Elasticsearch 是一个搜索和分析引擎。
  • Logstash 是服务器端数据处理管道,能够同时从多个来源采集数据,转换数据,然后将数据发送到诸如 Elasticsearch 等“存储库”中。
  • Kibana 则可以让用户在 Elasticsearch 中使用图形和图表对数据进行可视化(以上内容摘自elastic官网)。

开始搭建

  • 首先,让我们从elastic官网下载三个项目,请注意,务必下载相同版本号的安装包。我这里使用的是7.12.0版本。
https://www.elastic.co/cn/downloads/past-releases/elasticsearch-7-12-0
https://www.elastic.co/cn/downloads/past-releases/kibana-7-12-0
https://www.elastic.co/cn/downloads/past-releases/logstash-7-12-0
  • 将下载的安装包解压,安装要在非root用户下进行。

es安装与配置

  • es有两个默认端口,外部通信端口默认9200,走的是HTTP协议;集群内部通信端口默认9300,走的是TCP协议;
  • 由于我是在开发机上安装的,公司内部有端口限制,所以我这里将外部通信端口改为8920。
vi /home/work/es/elasticsearch-7.12.0/config/elasticsearch.yml

安装ELK版本哪一个好_字段

  • 接下来我们启动es:
/home/work/es/elasticsearch-7.12.0/bin/elasticsearch

安装ELK版本哪一个好_安装ELK版本哪一个好_02

  • 在浏览器中访问下服务:

kibana安装与配置

  • kibana的默认端口是5600,我这里修改为8956
  • 由于我的es和kibana部署在同一台机器上,所以修改elasticsearch.hosts为 http://localhost:8920,该配置是个数组形式,我们目前只有一个节点,所以数组中只有一个元素。
  • 执行命令启动:
/home/work/es/kibana-7.12.0-linux-x86_64/bin/kibana

安装ELK版本哪一个好_字段_03

  • 通过浏览器访问,可以看到kibana已经启动:

logstash的安装和配置

  • logstash采集数据的流程包含三个阶段,对应配置文件中的三个部分:
  • logstash的配置稍微复杂些,因为需要针对日志做字段处理,配置文件如下:
input {
    file {
        path => ["/home/work/go/src/icode.baidu.com/baidu/games/gameapi/log/service/*","/home/work/go/src/icode.baidu.com/baidu/games/ms-game/log/service/*"]
        start_position => "beginning"
        sincedb_path => "/dev/null"
    }
}
filter {
    grok {
        match => {
            "message" => "(?<level>\S+): (?<time>(?<date>\d+-\d+-\d+) \d+:\d+:\d+).*logid\[(?<logid>\d+)\].*err\[(?<err>\d+)\].*api\[(?<api>\w+)\].*status\[(?<status>\w+)\].*appname\[(?<appname>.*?)\].*cost\[(?<cost>.*?)\].*errno\[(?<errno>\d+)\].*idc\[(?<idc>\w+)\].*client_ip\[(?<client_ip>.*?)\].*local_ip\[(?<local_ip>.*?)\].*method\[(?<method>\w+)\].*uri\[(?<uri>.*)\].*host\[(?<host_addr>.*?)\].*"
        }
    }

    date {
        match => ["time", "YYYY-MM-dd HH:mm:ss"]
    }

    mutate {
        convert => ["err", "integer"]
        convert => ["errno", "integer"]
        convert => ["status", "integer"]
        convert => ["cost", "float"]
        remove_field => ["path", "host","message","time"]
    }
}
output {
   elasticsearch {
     hosts => "http://10.12.75.61:8920"
     index => "log-%{date}"
   }
  stdout {}
}
  • input 指定采集方式是文件、start_position指定从文件头部开始采集。sincedb_path保存的采集位置记录文件的输出路径,/dev/null表示不记录,每次重启logstash都会从头开始采集。
  • filter主要做字段处理,首先使用grok插件,使用正则匹配和提取字段。然后对时间字段做格式化。最后转换了一些字段的类型。
  • output指定输出方式,这里同时输出到我的es和控制台,es索引名称以log开头,每天一个索引。

日志采集之后

  • 创建索引模式,打开kibana侧面菜单,Stack Management - > 索引模式。
  • 创建好索引模式后,可以在Discover中按照时间和条件筛选日志
  • 也可以配置自己的dashboard,支持各种图表。

安装ELK版本哪一个好_安装ELK版本哪一个好_04

安装ELK版本哪一个好_elastic_05