ELK

Elasticsearch+Logstash+Kibana搭建实时日志分析平台

搭建环境

MacOS Sierra+Java8

搭建过程

logstash

  1. 使用以下的命令:

brew install logstash

  1. 安装好后使用以下命令检查是否安装成功
$ logstash --version  
#(output)logstash 5.2.2

Elasticsearch

  1. 安装命令(ps:最好使用的Java环境是1.8,不然会有奇奇怪怪的错误)

brew install elasticsearch

  1. 安装好之后使用以下指令查看是否安装成功
$ elasticsearch --version
(output)Version: 5.2.2, Build: f9d9b74/2017-02-24T17:26:45.835Z, JVM: 1.8.0_121
  1. 启动停止Elasticsearch
brew services start elasticsearch
brew services stop elasticsearch

或者在Elasticsearch的安装目录下使用(brew安装的路径一般都是/usr/local/Cellar中的)


当然,还可以将elasticsearch添加至环境变量中

4. 浏览器访问```http://localhost:9200``` 可以看到如下信息

{ “name” : “8dfa-dd”, “cluster_name” : “elasticsearch_limbo”, “cluster_uuid” : “Np6rkkJWTHSAfOOql902Pw”, “version” : { “number” : “5.2.2”, “build_hash” : “f9d9b74”, “build_date” : “2017-02-24T17:26:45.835Z”, “build_snapshot” : false, “lucene_version” : “6.4.1” }, “tagline” : “You Know, for Search” }


### Kibana

1. Kibana不需要通过brew安装,直接下载压缩包后,解压
2. 在Kibana目录下使用bin/kibana,然后访问```http://localhost:5601``` 什么都不用管。

### X-Pack

1.在Elasticsearch 5.x的时代,监控和管理由X-Pack统一完成,包含:

- 安全:用户权限管理
- 告警:自动告警
- 监控:监控Elasticsearch集群的状态
- 报告:发送报告、导出数据
- 图表:可视化数据

2. 在安装X-Pack之前,需要停止Kibana和Elasticsearch

3. 然后分别在Kibana和Elasticsearch目录下输入

bin/elasticsearch-plugin install x-pack bin/kibana-plugin install x-pack


4. 安装完成后,启动elasticsearch和kibana,访问kibana时发现需要登录了, 默认用户名和密码是elastic/changeme。

5. 后续可以在Management面板中进行用户和角色的配置,也可以看到新增了Reporting。

6. 在Monitoring页面中可以看到Elasticsearch和Kibana的状态,点击Indices还可以看到具体索引的状态。

7. 通过shell修改密码:

   修改elastic用户的密码:

   ```shell
   $ curl -XPUT -u elastic 'localhost:9200/_xpack/security/user/elastic/_password' -d '{ "password" : "123456" }'

修改kibana用户的密码:

   $ curl -XPUT -u elastic 'localhost:9200/_xpack/security/user/kibana/_password' -d '{ "password" : "123456" }'

创建用户组和角色,创建所属用户 eg:创建beats_admin用户组,该用户组对filebeat有all权限,对.kibana有manage,read,index权限

   $ curl -XPOST -u elastic 'localhost:9200/_xpack/security/role/beats_admin' -d '{ "indices" : [ { "names" : [ "filebeat*" ], "privileges" : [ "all" ] }, { "names" : [ ".kibana*" ], "privileges" : [ "manage", "read", "index" ] } ] }'

创建jockbeat用户,密码是jockbeat

   $ curl -XPOST -u elastic 'localhost:9200/_xpack/security/user/jockbeat' -d '{ "password" : "jockbeat", "full_name" : "jock beat", "email" : "john.doe@anony.mous", "roles" : [ "beats_admin" ] }'

例子

官网上关于shakespeare(莎士比亚全集的例子)

  1. 下载官网上的 shakespeare.json 链接在这里
  2. shakespeare.json中的信息格式大概是这样的:
{
    "line_id": INT,
    "play_name": "String",
    "speech_number": INT,
    "line_number": "String",
    "speaker": "String",
    "text_entry": "String",
}
  1. 然后如果安装了X-Pack插件支持,则需要输入用户名密码如下:
curl -XPUT -u elastic http://localhost:9200/shakespeare -d '
{
 "mappings" : {
  "_default_" : {
   "properties" : {
    "speaker" : {"type": "string", "index" : "not_analyzed" },
    "play_name" : {"type": "string", "index" : "not_analyzed" },
    "line_id" : { "type" : "integer" },
    "speech_number" : { "type" : "integer" }
   }
  }
 }
}
';

如果没有安装X-Pack的支持,则吧其中的-u elastic删了就好了

  1. 上述就是在elasticsearch中建立了一个索引,之后的kibana就是用这个索引来读取展示elasticsearch中的信息。
  2. 接下来就是开启kibana,kibana目录下命令行输入bin/kibana ,然后在management中(x-pack安装之后setting就变成了这个了),配置index,具体可以看官网上的说明,或者是这篇博客
  3. 至此,都已经配置结束了,只要去Discover中去检索就好啦!

使用Logstash实时写入数据

  1. 编写logstash的.conf文件,文件内容如下:
input{
    file{
        path => ["/Users/limbo/Desktop/测试数据/test/test.md"]
	    start_position => beginning
        ignore_older => 0
        sincedb_path => "/dev/null"
    }
}   
filter {
    grok {
        match => { "message" => "%{IPORHOST:clientip} - %{USER:auth} \[%{HTTPDATE:timestamp}\] \"(?:%{WORD:verb} %{NOTSPACE:request}(?: HTTP/%{NUMBER:httpversion})?|%{DATA:rawrequest})\" %{NUMBER:response} (?:%{NUMBER:bytes}|-)"}
    }
    date {
        match => [ "timestamp" , "dd/MMM/YYYY:HH:mm:ss +0800" ]
    }
}
output{
    elasticsearch{
        user => "elastic"     #使用x-pack需要使用账户信息
        password => "elastic"
   }
    stdout{}
}
  1. 文件内容解析:
  1. kibana右上角的时间选择器一定要选好,否则什么数据都有可能看不到

  2. 如果要删除elasticsearch的index的话,可以执行

    $ curl -XDELETE 'http://your_host:9200/your_index_name'
    

    但是如果安装了x-pack的话,上述的语句输入终端的话会报一个权限错误,这时候只要在上面的语句加如用户名密码就好了

     $ curl -XDELETE 'http://your_host:9200/your_index_name' -u elastic -p changeme
    
  3. 关于匹配自定义正则的时候,在grok里面引入pattern_dir,在外面引入的话会到找不到的,还有制定的时候是制定目录名称,建议使用patterns,文件夹下放置自定义的文件,不需要后缀名。说一个自己碰到的,匹配换行符,抛开上面的不谈,这时候需要知道的是Linux下的换行是\nWindows下的换行是\r\n,我在grokdebug下用的是\n,但是在本机的时候却报了很久的grokparsefail这个错误,后来发现日志文件时windows下生成的,需要改成\r\n,附上logstash默认的patterns的位置

    logstash-5.3.2/vendor/bundle/jruby/1.9/gems/logstash-patterns-core-4.1.0/patterns 
    

集群搭建