ELK日志分析系统搭建过程以及使用说明

环境搭建

环境搭建说明

Centos 7 *2 + elastics 5.6.12 + logstash 5.6.12 + kibana 5.6.12 + filebeat 5.6.12

ElasticSearch环境搭建

  1. 下载解压

    1
    2
    wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.6.12.tar.gz
    tar -zxvf elasticsearch-5.6.12.tar.gz -C /elk/elasticsearch/
  2. 配置/config/elasticsearch.yml

    1
    2
    3
    4
    network.host: 0.0.0.0 # 访问地址
    http.port: 9200 #端口号
    cluster.name: nmtx-cluster
    node.name: node-1
  3. 运行

    1
    2
    nohup ./bin/elasticsearch > ../logs/elasticsearch.log  2>&1 & echo $! > process.pid
    #在后台运行,日志打印到../logs/elasticsearch.log,进程号保存至process.pid
  4. 踩过的坑
    1. 不要使用root账户启动elasticsearch,这是出于系统安全考虑设置的条件。
    2. max virtual memory areas vm.max_map_count [65530] is too low, increase to at ,需要调整虚拟内存设置
      1
      2
      3
      4
      5
      6
      vim /etc/sysctl.conf
      #添加如下信息并保存
      vm.max_map_count=655360

      #运行以生效
      sysctl -p
    3. 需要修改linux对文件、线程的限制
      1
      2
      3
      4
      5
      #修改系统文件
      vim /etc/security/limits.d/20-nproc.conf
      #调整成以下配置
      * soft nproc 4096
      root soft nproc unlimited
  5. 验证

      访问9200端口看到如下类似信息即可

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    {
    "name" : "node-1",
    "cluster_name" : "nmtx-cluster",
    "cluster_uuid" : "plk3ql1SQ2umnqSpyBGI_w",
    "version" : {
    "number" : "5.6.12",
    "build_hash" : "cfe3d9f",
    "build_date" : "2018-09-10T20:12:43.732Z",
    "build_snapshot" : false,
    "lucene_version" : "6.6.1"
    },
    "tagline" : "You Know, for Search"
    }

filebeat环境搭建

什么是Beats

  Beats 是安装在服务器上的数据中转代理,Beats 可以将数据直接传输到 Elasticsearch 或传输到 Logstash 。常见的Beats:

  • Packetbeat:网络数据包分析器,提供有关您的应用程序服务器之间交换的事务的信息。
  • Filebeat:从您的服务器发送日志文件。
  • Metricbeat:是一个服务器监视代理程序,它定期从服务器上运行的操作系统和服务收集指标。
  • Winlogbeat:提供Windows事件日志。

为什么使用filebeat

  相比 Logstash,FileBeat 更加轻量化。在任何环境下,应用程序都有停机的可能性。 Filebeat 读取并转发日志行,如果中断,则会记住所有事件恢复联机状态时所在位置 。Filebeat带有内部模块(auditd,Apache,Nginx,System和MySQL),可通过一个指定命令来简化通用日志格式的收集,解析和可视化。
FileBeat 不会让你的管道超负荷。FileBeat 如果是向 Logstash 传输数据,当 Logstash 忙于处理数据,会通知 FileBeat 放慢读取速度。一旦拥塞得到解决,FileBeat 将恢复到原来的速度并继续传播。

  1. 下载与安装

    1
    2
    wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-5.6.12-linux-x86_64.tar.gz
    tar -zxvf ilebeat-5.6.12-linux-x86_64.tar.gz -C /elk/filebeat/
  2. 配置filebeat.yml

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    filebeat.prospectors:

    # Each - is a prospector. Most options can be set at the prospector level, so
    # you can use different prospectors for various configurations.
    # Below are the prospector specific configurations.

    - input_type: log

    # Paths that should be crawled and fetched. Glob based paths.
    paths:
    - /var/log/*-info.log #监听文件目录以及正则匹配规则
    #- c:\programdata\elasticsearch\logs\* windows下的路径
    multiline: # 日志多行处理,列如java的堆栈信息
    pattern: ^\d{4} # 匹配前缀为数字开头,如果不是日期,该行日志接到上一行后尾
    negate: true
    match: after

    fields: # 自定义属性,用于 Logstash 中
    service_name: customer # 产生日志的服务名
    log_type: info # 日志文件类型
    server_id: ip-address # 服务器ip地址


    #----------------------------- Logstash output --------------------------------
    output.logstash:
    # The Logstash hosts
    hosts: ["localhost:5043"] #这里是发送到本地的logstash,要与logstash的input对应,也可以设置为elasticsearch

  3. 运行

    1
    nohup ./filebeat -e -c filebeat.yml > ../logs/filebeat.log 2>&1 &  echo $! > process.pid

logstash环境搭建

  1. 下载与安装

    1
    2
    wget https://artifacts.elastic.co/downloads/logstash/logstash-5.6.12.tar.gz
    tar -zxvf logstash-5.6.12.tar.gz -C /elk/logstash/
  2. 配置logstash /config/logstash.conf

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    input {
    beats {
    host => "localhost" #监听本地访问的5043端口
    port => "5043"
    }
    beats{
    host => "0.0.0.0" #监听任何地址都可访问的5044端口
    port => "5044"
    }
    }

    filter {
    if [fields][log_type] == 'error' {
    grok {
    match => { "message" => "%{TIMESTAMP_ISO8601:logdate} %{LOGLEVEL:loglevel} %{JAVACLASS:class} %{NUMBER:thread} %{JAVALOGMESSAGE:logmsg}" }
    }
    date { # 将 kibana 的查询时间改成日志的打印时间,方便之后查询,如果不改的话,kibana会有自己的时间,导致查询不方便
    match => ["logdate", "yyyy-MM-dd HH:mm:ss Z", "ISO8601"]
    target => "@timestamp"
    }
    }

    if [fields][log_type] == 'info' { # 如果是info类型该怎么格式,这里是重复的,如果有日志格式不一样比如nginx的日志类型,可以在这里自己定义
    grok {
    match => { "message" => "%{TIMESTAMP_ISO8601:logdate} %{LOGLEVEL:loglevel} %{JAVACLASS:class} %{NUMBER:thread} %{JAVALOGMESSAGE:logmsg}" }
    }
    date {
    match => ["logdate", "yyyy-MM-dd HH:mm:ss Z", "ISO8601"]
    target => "@timestamp"
    }
    }
    }

    output {
    elasticsearch {
    hosts => ["localhost:9200"]
    index => "%{[fields][service_name]}-%{+YYYY.MM.dd}" # 在es中存储的索引格式,按照“服务名-日期”进行索引
    }
    }
  3. 运行

    1
    nohup bin/logstash -f config/logstash.conf > ../logs/logstash.log  2>&1 & echo $! > process.pid

kibana环境搭建

  1. 下载与安装

    1
    2
    wget https://artifacts.elastic.co/downloads/kibana/kibana-5.6.12-linux-x86_64.tar.gz
    tar -zxvf kibana-5.6.12-linux-x86_64.tar.gz -C /elk/kibana/
  2. 配置kibana /config/kibana.log

    1
    2
    3
    server.port: 5601
    server.host: "0.0.0.0" #允许其他终端访问
    elasticsearch.url: "http://localhost:9200" #elasticsearch访问地址
  3. 运行

    1
    nohup bin/kibana > ../logs/kibana.log 2>&1 & echo $! > process.pid
  4. 验证
      访问5601端口有页面即为正常

使用说明

Kibana使用说明

  1. 查看系统运行状态
      访问http://localhsot:5601/status
  2. 基本使用
      在 Discover 页搜索和浏览数据;在 Visualize 页做数据图表映射;在 Dashboard 页创建并查看自定义仪表板。

参考资料:
https://www.elastic.co/guide/cn/kibana/current/index.html

elasticsearch查询语法

  1. 其中status字段包含active   ->   status:active
  2. 其中title字段包含quick或brown。如果省略OR运算符,将使用默认运算符    ->    title:(quick OR brown) 或者是title:(quick brown)
  3. 其中author字段包含精确短语”john smith”    ->    author:”john smith”
  4. 其中任何字段book.title,book.content或book.date包含 quick或brown(注意我们需要如何*使用反斜杠转义)    ->   
  5. 该字段title具有任何非null值:  ->  exists:title
  6. 通配符搜索可以在单个术语上运行,使用?替换单个字符,并*替换零个或多个字符 请注意,通配符查询可能会占用大量内存并执行得非常糟糕 - 只需考虑需要查询多少个术语以匹配查询字符串"a* b* c*"。
  7. 正则表达式   ->   /pattern/
  8. 模糊   ->   quikc~brwn~foks~
  9. 邻近搜索 邻近搜索允许我们指定短语中单词的最大编辑距离:  ->  ”fox quick”~5
  10. 范围 可以为日期,数字或字符串字段指定范围。包含范围用方括号指定,[min TO max]排他范围用大括号指定{min TO max}。
  11. 保留字符 + - = && || > < ! ( ) { } [ ] ^ “ ~ * ? : \ /
  12. 分组 可以将多个术语或子句与括号组合在一起,以形成子查询:
  13. 布尔运算符 首选运算符+(此术语必须存在)和- (此术语不得出现)。
  14. 提升 使用boost运算符^使一个术语比另一个术语更相关。例如,如果我们想要找到关于fox的所有文件,但我们对quick fox特别感兴趣   ->   quick^2 fox

参考资料
https://www.elastic.co/guide/en/elasticsearch/reference/6.0/query-dsl-query-string-query.html#_boosting