ELK(ElasticSearch+LogStash+Kibana)分布式日志系统

ELK架构介绍

ELK分别是ElasticSearch LogStash Kibana

他们的职责分别是:

  1. logstash:采集日志,输出给elasticsearch
  2. elasticsearch:提供搜索查询功能
  3. kibana:展示数据

结构如下:

这里写图片描述

本人使用的是Linux环境安装ELK

安装JDK

ELK需要JDK环境,有两种方式安装:

第一种,使用yum安装:

#查看jdk版本 yum search java|grep jdk
[root@vagrant-centos65 vagrant]# yum search java|grep jdk
ldapjdk-javadoc.x86_64 : Javadoc for ldapjdk
java-1.6.0-openjdk.x86_64 : OpenJDK Runtime Environment
java-1.6.0-openjdk-demo.x86_64 : OpenJDK Demos
java-1.6.0-openjdk-devel.x86_64 : OpenJDK Development Environment
java-1.6.0-openjdk-javadoc.x86_64 : OpenJDK API Documentation
java-1.6.0-openjdk-src.x86_64 : OpenJDK Source Bundle
java-1.7.0-openjdk.x86_64 : OpenJDK Runtime Environment
java-1.7.0-openjdk-demo.x86_64 : OpenJDK Demos
java-1.7.0-openjdk-devel.x86_64 : OpenJDK Development Environment
java-1.7.0-openjdk-javadoc.noarch : OpenJDK API Documentation
java-1.7.0-openjdk-src.x86_64 : OpenJDK Source Bundle
java-1.8.0-openjdk.x86_64 : OpenJDK Runtime Environment
java-1.8.0-openjdk-debug.x86_64 : OpenJDK Runtime Environment with full debug on
java-1.8.0-openjdk-demo.x86_64 : OpenJDK Demos
java-1.8.0-openjdk-demo-debug.x86_64 : OpenJDK Demos with full debug on
java-1.8.0-openjdk-devel.x86_64 : OpenJDK Development Environment
java-1.8.0-openjdk-devel-debug.x86_64 : OpenJDK Development Environment with
java-1.8.0-openjdk-headless.x86_64 : OpenJDK Runtime Environment
java-1.8.0-openjdk-headless-debug.x86_64 : OpenJDK Runtime Environment with full
java-1.8.0-openjdk-javadoc.noarch : OpenJDK API Documentation
java-1.8.0-openjdk-javadoc-debug.noarch : OpenJDK API Documentation for packages
java-1.8.0-openjdk-src.x86_64 : OpenJDK Source Bundle
java-1.8.0-openjdk-src-debug.x86_64 : OpenJDK Source Bundle for packages with
ldapjdk.x86_64 : The Mozilla LDAP Java SDK
#选择版本进行安装
[root@vagrant-centos65 vagrant]# yum install java-1.8.0-openjdk

第二种,下载jdk源码进行安装,详见:https://blog.csdn.net/u010837612/article/details/50951215

使用java -version 命令查看jdk是否安装成功

ElasticSearch

下载与安装

下载tar包:

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.2.4.tar.gz

解压安装,由于elasticsearch为了安全不允许我们使用root运行elasticsearch,因此我们要创建一个用户给elasticsearch使用

tar -zxvf elasticsearch-6.2.4.tar.gz
adduser elasticsearch
chown elasticsearch:elasticsearch -R elasticsearch-6.2.4
su elasticsearch
cd elasticsearch-6.2.4
#启动
bin/elasticsearch

启动后我们可以访问localhost:9200,如果有打印出信息说明elasticsearch启动成功

[root@vagrant-centos65 vagrant]# curl localhost:9200
{
  "name" : "1N6qOms",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "hLz73Ye3QBysYvoL38cM0A",
  "version" : {
    "number" : "6.2.4",
    "build_hash" : "ccec39f",
    "build_date" : "2018-04-12T20:37:28.497551Z",
    "build_snapshot" : false,
    "lucene_version" : "7.2.1",
    "minimum_wire_compatibility_version" : "5.6.0",
    "minimum_index_compatibility_version" : "5.0.0"
  },
  "tagline" : "You Know, for Search"
}

如果你用的是虚拟机或者云服务器启动elasticsearch,但是却无法通过ip访问,如ip:9200,那么你可以修改config/elasticsearch.yml

network.host = 0.0.0.0

可能遇到的问题

启动过程中你可能遇到以下问题:

问题: max file descriptors [65535] for elasticsearch process is too low, increase to at least [65536]

解决:

编辑 /etc/security/limits.conf
在文件最后添加

* soft nofile 65536
* hard nofile 65536

保存
此文件修改后需要重新登录用户,才会生效

问题:max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

解决:

修改/etc/sysctl.conf配置文件,

cat /etc/sysctl.conf | grep vm.max_map_count
vm.max_map_count=262144

如果不存在则添加

echo "vm.max_map_count=262144" >>/etc/sysctl.conf

问题:max number of threads [1024] for user [elasticsearch] is too low, increase to at least [2048]

解决:

修改/etc/security/limits.d/90-nproc.conf

*          soft    nproc     4096

问题:system call filters failed to install; check the logs and fix your configuration or disable system call filters at your own risk

解决:

修改安装目录下config/elasticsearch.yml

bootstrap.system_call_filter: false

如果没有找到这个配置项,就手动添加

有解决不了的问题,也可参考下方链接:

  1. https://blog.csdn.net/qq942477618/article/details/53414983
  2. https://blog.csdn.net/odeng888/article/details/76380832

配置

elasticsearch的config目录下主要有三个配置文件:

  1. elasticsearch.yml:elasticsearch的配置文件
  2. jvm.options :java虚拟机参数配置
  3. log4j2.properties:日志配置

java和日志配置这里不细说了,主要关注elasticsearch.yml,它主要有以下配置项:

配置 说明
cluster.name 集群名称,同一个集群中的elasticsearch这个名称要配置成一样
node.name 节点名称
network.host ip地址,elasticsearch用该地址来判断当前与运行模式是开发模式还是生产模式,localhost,127.0.0.1之类的地址为开发模式,其他则为生产模式
http.port 端口
path.data 数据存储路径,不同的实例这个地址不能相同
path.log 日志存储路径
discovery.zen.ping.unicast.hosts 集群主机初始列表

集群

单机日志系统可以直接跳过这个部分不看

本地集群

我们可以尝试在本地再启动一个elasticsearch实例,是两个实例成为一个集群

有两种方式,一是复制一份刚刚安装的elasticsearch,修改配置文件中http.port和path.data,然后启动即可。

二是在启动的时候增加参数指定port和path.data,如:

bin/elasticsearch -Ehttp.port=8200 -Epath.data=node2

启动后我们可以访问localhost:8200也能得到和实例1相同的结果。

访问localhost:8200/_cat/nodes 查看当前集群的节点:

[root@vagrant-centos65 data]# curl localhost:8200/_cat/nodes
127.0.0.1 11 96 0 0.00 0.00 0.00 mdi * 1N6qOms
127.0.0.1 30 96 0 0.00 0.00 0.00 mdi - iBdu9zU

多机集群

如果要多台机器集群,步骤也很简单,只要每台机器分别安装elasticsearch,然后配置master初始列表

node.name: node-n
discovery.zen.ping.unicast.hosts: ["host1:port", "host2:port"]

然后启动实例即可。

Kibana

下载与安装

kibana的下载与安装和elasticSearch基本一致

wget https://artifacts.elastic.co/downloads/kibana/kibana-6.2.4-linux-x86_64.tar.gz
tar -zxvf kibana-6.2.4

不一样的是,在启动之前,我们要修改配置文件config/kibana.yml,配置elasticsearch的地址:

elasticsearch.url: "http://ip:9200"

然后启动:

bin/kibana

启动后访问http://localhost:5601 就能进入kibana

配置

kibana配置文件在config、kibana.yml,主要关注以下配置项:

配置 说明
server.host 配置服务ip,想让外部访问时就必须配置
server.port 端口
elasticsearch.url elasticsearch的访问地址

logstash

安装

安装和kibana差不多

 wget https://artifacts.elastic.co/downloads/logstash/logstash-6.2.4.tar.gz
 tar zxvf logstash-6.2.4.tar.gz

进入config目录,创建一个logstash.conf 文件:

input{
     file{
       type => "log"
       path => "/root/logs/*.log"
       start_position => "beginning"

     }
}

output{
      elasticsearch{
       hosts => "127.0.0.1"
       index => "log-%{+YYYY.MM.dd}"
     }
}

input配置输入源,我们配置成log文件,output配置输出,我们输出到之前安装的elasticsearch中,索引为log-日期

启动:

bin/logstash -f config/logstash.conf

然后打开kibana,点击management

这里写图片描述

创建索引

这里写图片描述

这里写图片描述

创建成功后,我们来到刚刚配置文件配置的日志路径,创建一个log文件,随意输入一些内容

echo 123 >> /root/logs/test.log

然后就可以在kibana中看到我们的日志

这里写图片描述

日志格式解析

上面我们只是简单的将日志的内容读取出来,logstash给我们提供了grok,能够格式化解析日志内容,例如有一条日志如下:

[2018-05-05 10:00:00][192.168.3.3][i am log]

我们修改配置文件logstash.conf,增加filter

input{

        file{
          type => "log"
          path => "/root/logs/*.log"
          start_position => "beginning"

        }

}
filter {

  #定义数据的格式
  grok {
    match => { "message" => "\[%{DATA:timestamp}\]\[%{IP:serverIp}\]\[%{DATA:content}\]"}
  }

}

output{

  elasticsearch{
   hosts => "127.0.0.1"
   index => "log-%{+YYYY.MM.dd}"
 }
}

然后重启logstash,查看kibana:

这里写图片描述

grok具体使用可以查看官方文档:https://www.elastic.co/guide/en/logstash/current/plugins-filters-grok.html

elasticsearch CRUD操作

这部分内容可以不看,与日志系统没有太大关系。

elasticsearch的crud操作可以在kibana的Dev Tools界面,点击get to work操作,如下所示:

这里写图片描述

然后我们就可以在控制台进行增删改查操作。

首先我们必须了解一下elasticsearch的一些常用术语:

术语 说明
document 文档,也可以简单理解为一条数据
index 索引
type 索引中的数据类型
feild 字段名
Query DSL 查询语句

下面给出一些CRUD的示例:

插入文档

插入id为1的文档数据:(点击绿色箭头执行语句)

这里写图片描述

查询

获取刚刚插入的文档:

这里写图片描述

更新

这里写图片描述

注意:要更新的内容要放在”doc”中

删除文档

这里写图片描述

查询语句

查询有两种方式:

方式一:

GET /account/user/_search?q=jun

这种方式只能进行一些简单的匹配

方式二:

查询name = jun的文档

GET /account/user/_search
{
  "query":{
    "term": {
      "name": {
        "value": "jun"
      }
    }
  }
}

更多语法请查看官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl.html

猜你喜欢

转载自blog.csdn.net/u010837612/article/details/80196991