ELK部署教程

ELK部署教程

背景原因什么的就不费话了,直接开始吧

我的流程是这样的

filebeat --> logstash --> elasticsearch --> kibana      有没有很简单

filbeat会部署在多个服务器上收集日志,后三个部署在单独的服务器上

版本:
java: 1.8
filebeat, logstash, elasticsearch, kibana: 7.0.0
为了不必要的麻烦,尽量选择一直的版本

产品下载地址:https://www.elastic.co/downloads/

elasticsearch里面有一个x-pack插件,可以对kibana加密,可以开启权限控制之类的,7.0.0已经可以免费使用了,所以不要下载太老的版本,不然是要收费的

下载好之后都分别解压到某个目录就好

filebeat

filebeat与需要收集的日志放在同一个服务器中,她的配置主要在filebeat.yml这个文件中

filebeat.inputs:
- type: log
  enable: true
  document_type: "log"
  paths:
    - /opt/...
  fields:
    logtype: test.log
    tag: test
    
  multiline:              #如果不写这里的配置的话,如果日志中有错误日志,那么她只收集ERROR所在的一行
    pattern: '^#'          后面的错误详情是不会收集的,因为filebeat是按行收集的,而他认为一个行的开
    negate: true           头是#,所以这里做一下处理,告诉filebeat不以#开头的行都算在上一行
    match: after
    
output.logstash:          //配置好logstash的ip和端口
  # The Logstash hosts
  hosts: ["ip:port"]
启动命令:nohup ./filebeat -e -c filebeat.yml -d "publish" &     --后台启动

logstash

可以把logstash-7.0.0/config/下面的conf文件复制一份,重命名一下,再进行配置

input {
  beats {
    port => 5044(默认端口)
  }
}
filter {
  if [fields][tag] == "test" {
    grok {
      match => {"message" => "%{IP:clientip} - - \[%{TIMESTAMP_ISO8601:times}\] \"%{WORD:request_action} %{DATA:request} HTTP/%{NUMBER:http_version}\" %{NUMBER:status:int} %{NUMBER:body_sent:int} "}
    }
    date {
      match => ["times", "yyyy-MM-dd HH:mm:ss.SSS"] 
    }
  }
}
output {
  if [fields][tag] == "test" {
#    stdout {
#        codec=>rubydebug{}
#    }
    elasticsearch {
      hosts => ["http://ip:9200]
      index => "test.log-%{+YYYY.MM.dd}"
    }
  }
}

logstash的配置文件里grok是一个很有用的东西,他可以对你的日志做解析,结构化,分段分块分别做处理之类的,很强大,不过需要对正则比较熟悉

grok下面有个date需要解释一下,因为filebeat收集非常快,可能在一毫秒之间就会收集几十条日志,这个时候传到logstash的日志就会在毫秒级别乱序,最终展示在kibana中的日志可能下一毫秒的日志显示在上一毫秒的上面,为了解决这种情况,就是将时间换成产生这条日志本身的时间而不是收集这条日志的时间

启动命令:`nohup ./bin/logstash -f config/logstash-sample.conf &

elasticsearch

主要配置文件:elasticsearch-7.0.0/config/elasticsearch.yml

关键配置:

node.name: node-1
network.host: 自己的ip
http.port: 9200(默认端口)
cluster.initial_master_nodes: ["node-1"]
启动命令:`./bin/elasticsearch -d`(后台启动,必须使用elk用户启动)

kibana

主要配置文件:kibana-7.0.0-linux-x86_64/config/kibana.yml

关键配置

server.port: 5601
server.host: "ip"
elasticsearch.hosts: ["http://ip:9200"]

启动命令:nohup ./bin/kibana &

停止命令:根据端口(5601)查找进程号然后kill,因为kibana是node.js写的,直接查找grep kibana是找不到kibana进程的

然后就可以在浏览器里输入kibana的ip访问了

定时清理elasticsearch日志

收集日志如果每天的日志量非常大的话,不久磁盘就会被撑爆,所以要做好定时删除数据的任务,但是删除数据不能盲目删除,否则删不干净就会导致一系列麻烦

elasticsearch-curator

curator允许对索引和快照执行许多不同的操作,这里使用它来删除索引和数据

安装好curator之后,建立elasticsearch-curator工作空间
在这里插入图片描述

然后建立如图所示的两个文件

action.yml

actions:
  1:
    action: delete_indices    # 这里执行操作类型为删除索引
    description: "delete index expire date"
    options:
      ignore_empty_list: True
      timeout_override:
      continue_if_exception: False
      disable_action: False
    filters:
    - filtertype: pattern
      kind: regex    # 这里是指以正则表达式匹配索引
      value: '^(这里将你在logstash中配置的索引名(前缀就行)写在这里(比如这里的test)).*$'
    # 这里匹配时间
    - filtertype: age
      source: name    # 这里不但可以根据name来匹配,还可以根据字段等,详见官方文档
      direction: older
    # 这里定义的是days,还有weeks,months等,总时间为unit * unit_count
      unit: days
      unit_count: 7       #保留7天的日志
      timestring: '%Y.%m.%d'    # 这里是跟在前面pattern后面的时间的格式

curator.yml

client:
  hosts:
    - ip     #elasticsearch的ip
  port: 9200
  url_prefix:
  use_ssl: False
  certificate:
  client_cert:
  client_key:
  ssl_no_validate: False

#  http_auth: elastic:123456
  timeout:
  master_only: True

logging:
  loglevel: INFO
  logfile:
  logformat: default
  blacklist: ['elasticsearch', 'urllib3']

执行命令

curator --config curator.yml action.yml

可以在执行前和执行后用以下命令查看所有索引已确认是否生效

curator_cli --host es的ip --port 9200 show_indices --verbose

也可以用df -h查看空间以确认

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值