ELK(Elasticsearch + Logstash + Kibana) 搭建【Linux平台】

0. 下载相应的压缩包

[Elasticsearch] https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.3.2.tar.gz
[Logstash] https://artifacts.elastic.co/downloads/logstash/logstash-6.3.2.tar.gz
[Kibana] https://artifacts.elastic.co/downloads/kibana/kibana-6.3.2-linux-x86_64.tar.gz
[ik] https://github.com/medcl/elasticsearch-analysis-ik/releases(参考:elasticsearch配置 ik analyzer)

(需要JDK1.8)

1. 创建Linux账户(可选)

  创建用户 elk :# useradd elk

  设置密码:# passwd elk

  指定文件夹授权:# chown -R elk:elk /data/elk

2. 下载完成后解压

  解压至指定目录:

    tar 命令使用 -C 参数,eg:tar -zxvf logstash-6.3.2.tar.gz -C ../elk

    unzip 命令使用 -d 参数,eg:unzip elasticsearch-analysis-ik.zip -d ../elk/elasticsearch/plugins/ik

3. 启动

  3.1 启动elasticsearch

    3.1.1 修改elasticsearch.yml,允许远程访问:network.host:0.0.0.0 (任意IP都可以访问,也可配置固定ip,即:仅允许固定ip访问)

    3.1.2 启动: ./elasticsearch &  (& 表示后台启动)

    3.1.3  报错:

      1) max file descriptors [4096] for elasticsearch process likely too low, increase to at least [65536]
      2) max number of threads [1024] for user [elk] likely too low, increase to at least [4096]

      解决问题1和2:

      在 /etc/security/limits.conf 文件中添加: (elk 代表指定用户,如果对所有用户,可以直接用 * 代替elk)

elk soft nofile 65536
elk soft nproc 4096
elk hard nofile 65536
elk soft memlock unlimited
elk hard memlock unlimited

3) system call filters failed to install; check the logs and fix your configuration or disable system call filters at your own risk

原因:Centos6不支持SecComp(secure computing)

解决办法:禁用 call_filter,elasticsearch.yml 中配置 bootstrap.system_call_filter: false(注意:false前面还需要加一个空格)

3.2 启动Kibana

3.2.1.指定elasticsearch地址 (修改 kibana.yml 配置文件)
  elasticsearch.url: "http://localhost:9200"
3.2.2.允许远程访问(修改 kibana.yml 配置文件)
  server.host: "0.0.0.0"

3.2.3 启动 (& 表示后台启动)

  ./kibana & 

3.3 启动Logstash

假设日志格式:

  2018-08-15 00:00:29 INFO 移动

  2018-08-15 00:00:29 INFO 联通

  2018-08-15 00:00:29 INFO 电信

  logstash_app_log.conf  示例:

  其中,配置文件中的 stdin 和 stdout 可以让用户在启动后的 terminal 界面进行测试,输入指定格式的内容,查看经过logstash后能否得到相应的格式

 

input {
	file {
		path => ["/data/elk/log-data/log.2018-08-15"] # 文件所在路径
          start_position => "beginning" } # stdin {} # 用于测试 } filter { # 定义数据格式 grok { match => { "message" => "%{DATA:date} %{DATA:time} %{DATA:level} %{GREEDYDATA:keyword}" } } } output { elasticsearch { hosts => ["localhost:9200"] index => "logstash-%{type}-%{+yyy.MM.dd}" # index 命名 } # stdout {} # 用于测试 }

注:在编写 match 正则表达式可以借组:

  1.Kibana - DevTools - Grok Debugger

  2. 在线 debug 站点 http://grokdebug.herokuapp.com/

     启动: ./logstash -f logstash_app_log.conf (启动是指定编写的配置文件) 

最后,通过 Kibana 的 DevTools,查看是否成功构建索引

  1. GET _cat/indices 查看是否生成索引

  2. GET INDEX_NAME/_search 查看索引内容

 

:logstash 会记录已解析的文件(未完成解析的文件也记录在内),在调试的过程中,常需要重新为log文件建立索引,这就需要增加配置:参考:Stack Overflow [How to force Logstash to reparse a file?]

input {
    file {
        path => "/tmp/logfile_to_analyse"
        start_position => "beginning"
        sincedb_path => "/dev/null" # 增加配置 或者 sincedb_path => "NUL" on windows
    }
}

 

posted @ 2018-08-17 14:05  buliang  阅读(448)  评论(0编辑  收藏  举报