ELK安装

11 篇文章 0 订阅

1.简介

ELK的工作流程:logstash获取日志信息,进行筛选,传给elasticsearch,然后kibana从elasticsearch获取数据,通过web界面展示出来,beat套件是负责收集的一套工具。

2.filebeat安装

依赖:jdk7
filebeat是负责收集主机上的数据,应为filebeat配置简介,依赖环境低,可以将多台filebeat收集到的日志信息,传输给logstash进行处理。

配置说明

#收集配置(input_type可以设置多个)
# 定义一个挖矿者
filebeat.prospectors:
# 
- input_type: log
  paths:
    - /data/trade/app/tradeserver/logs/*.log
    - /data/trade/app/scheduleserver/logs/*.log
    - /data/trade/app/bankprocessor/logs/*.log
    - /data/trade/app/orgmanageserver/logs/*.log
    - /data/trade/app/manageserver/logs/*.log
    
# 定义日子文件字符集,默认UTF8
  encoding: gbk
  # 指定不采集关键字的列
  exclude_lines: ["DBG", "反序列化报文", "返回文本回应", "解密失败"]
  # 指定采集关键字
  include_lines: ["ERR", "WARN", "失败"]
  # 顶多不采集文件
  exclude_files: [".zip$", ".out$"]

# 定义日志的type,可以在es中根据type进行判断
  document_type: app
 
# 对日志中添加新的行
  #fields:
    #  level: debug
    #  review: 1
   #如果添加此字段,fields会和type同级,否则默认为"fields":{ "level":"debug" }
   #fields_under_root: true

- input_type: log
  paths:
    - /data/trade/www/tomcat_trade/logs/catalina.out
  document_type: tomcat

  # 合并行
  multiline:
    pattern: '^[0-9]{4}\-[0-9]{2}\-[0-9]{2}'      # 将不是以日期开头的行合并
    negate: true
    match: after
    max_lines: 50                    # 最大合并行
    timeout: 5s                    # 合并时间,防止堵塞

# 输出设置
output.redis:
  hosts: ["192.168.30.135"]
  key: "tradeserver"
  db: 0
  timeout: 5
注意:
这里redis是用来做消息队列,所有不存在大量日志撑爆你的内存。

启动

./filebeat

创建filedata索引

$ ./import_dashboards -es http://172.20.10.16:9200 -user elastic -pass changeme  -only-index

执行完脚本后,会在kibana中出现一个filebeat-*的索引,我们可以更加方便的可视化这些数据。

3.安装logstash(5.2.0)

依赖:jdk8

下载:5.2

解压完成后,手动执行下面的测试命令:

./logstash -e 'input{stdin{}}output{stdout{codec=>rubydebug}}'

插件安装

$ ./logstash-plugin list       列出所有可以安装的插件
$ ./logstash-plugin install x-pack   安装x-pack插件

常用插件

logstash-filter-geoip            # 一个本地数据库,可以查询ip信息
logstash-filter-grok              # 对message进行单独的拆分,传输给es
x-pack                                   # 统一管理插件,安装后,对连接进行用户加密,Kibana可以看到各组件的运行详情

手动创建logstash.conf文件,内容如下

# 获取本地日志文件,将日志内容写入到redis
input {
    redis
    {
    host => "192.168.30.135"
    port => "6379"
    data_type => "list"
    key => "tradeserver"
    }
}
input {
    redis
    {
       host => "192.168.30.135"
       port => "6379"
       data_type => "list"
       key => "tomcat_trade"
    }
}

filter {
    if [type] == "log" {
        # json格式的message解析
       json { 
           source => "message" 
           #remove_field => ["offset", "message", "_score", "@version"] 
           }
       # grok 对指定字段采用匹配,可以自己采用正则,也可以使用默认(./vendor/bundle/jruby/1.9/gems/logstash-patterns-core-4.1.0/patterns
),测试地址:http://grokdebug.herokuapp.com/
       grok {
          match => [
            # 使用预先编辑好的正则表达式解析
            "message", "%{IPORHOST:addre} \- \- \[%{HTTPDATE:timestamp}\] \"%{WORD:http_method} %{NOTSPACE:request} HTTP/%{NUMBER:httpversion}\" %{NUMBER:status} (?:%{NUMBER:bytes}|-)"
            # 手动编辑正则表达式解析
            #"message" => "^.*\"(?<real_ip>[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)\".*(?<upstream_ip>\"[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+\:[0-9]+\"$)"
        ]
        }
       # 官网nginx日志解析
       # grok {
       #     match => { "message" => "%{NGINXACCESS}" }
       # }
    #  对指定字段进行地址查询,只支持ip地址
    geoip {
            source => "real_ip"
            remove_field => ["geoip.country_code3", "geoip.country_code2", "geoip.region_code"]
            #database => "/data/elk/logstash/config/GeoLiteCity.dat"
        }

    mutate {
      convert => [ "[geoip][coordinates]", "float" ]
      #convert => [ "response","integer" ]
      #convert => [ "bytes","integer" ]
      #replace => { "type" => "nginx_access" }
      #remove_field => "message"
    }

    date {
      match => [ "timestamp","dd/MMM/yyyy:HH:mm:ss Z"]

    }
    mutate {
      remove_field => "timestamp"

    }
    }
}

input {
   file {
      path => ["/tmp/redis.log", "/var/log/message"]
      type => "system"
      start_position => "beginning"        # 设置从什么位置读取,如果设置为beginning,第一次会从文件头部开始读取,后期默认从结尾开始读取
   }
}

output {
        if [type] == "log" {
        elasticsearch {
                 hosts => ["192.168.30.135:9200"]
                 index => "logstash-nginx-access-%{+YYYY.MM.dd}"
         user => elastic
                 password => changeme
        }
    }
    else if [type] == "app" {
            elasticsearch {
                 hosts => ["192.168.30.135:9200"]
             index => "app-%{+YYYY.MM.dd}"
         user => elastic
                 password => changeme
            }
    }
    else {
        elasticsearch {
                hosts => ["192.168.30.135:9200"]
                index => "system-%{+YYYY.MM.dd}"
                user => elastic
                password => changeme
            }
        }
}

geoip数据库下载

curl -O "http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz"
gunzip GeoLiteCity.dat.gz

启动logstash服务

./bin/logstash  -f logstash.conf

注意: 如果你的logstash不是root用户运行,那么需要运行的用户对日志文件有读取的权限

echo "www.ioart.com" >> /var/log/fjp.log
当你对/var/log/fjp.log进行追加文件的时候,在logstash的运行窗口是有输出的,如下:
{
       "message" => "www.ioart.com",
"@version" => "1",
    "@timestamp" => "2015-09-18T06:04:30.975Z",
          "type" => "cms",
          "host" => "example.com",
          "path" => "/var/log/fjp.log"
}

4.安装elasticsearch

修改elasticsearch.yml配置文件

#指定索引存放位置,多个地方用,号分割
path.data: /path/to/data
path.logs: /path/to/logs
# 关闭系统调佣过滤器,详细见:https://www.elastic.co/guide/en/elasticsearch/reference/current/system-call-filter-check.html
bootstrap.system_call_filter: false
#网络监听地址,如果更改之选项,会开启强制启动检测,需要修改系统参数
network.host: 0.0.0.0

系统参数修改

  1. vi /etc/sysctl.conf 加入: vm.max_map_count=262144 执行 sysctl -p 使配置生效
  2. vi /etc/security/limits.d/20-nproc.conf #打开进程数 * soft nproc 65536
  3. vi /etc/security/limits.conf #打开文件数 * soft nofile 65536 * hard nofile 65536 * - memlock unlimited

插件安装

$ ./elasticsearch-plugin list
x-pack

$ ./elasticsearch-plugin install x-pack

安装x-pack模块后,连接es需要账号密码,默认账号密码为:elastic/changeme

注:

x-pack监控功能是免费的,需要去官网申请证书:https://www.elastic.co/guide/en/x-pack/current/installing-license.html

对服务进行启动之间,将上面的注释全部取消 ./elasticsearch

集群状态查看

wget http://172.20.10.17:9200/_cluster/health?pretty

访问测试

curl -X GET http://localhost:9200
{
  "status" : 200,
  "name" : "Jessica Drew",
  "cluster_name" : "elasticsearch",
  "version" : {
    "number" : "1.7.2",
    "build_hash" : "e43676b1385b8125d647f593f7202acbd816e8ec",
    "build_timestamp" : "2015-09-14T09:49:53Z",
    "build_snapshot" : false,
    "lucene_version" : "4.10.4"
  },
  "tagline" : "You Know, for Search"
}

查看elasticsearch是否获取到了数据

curl 'http://localhost:9200/_search?pretty'

如果获取到了数据,那么就说明elasticsearch安装没有问题

5.kibana安装

修改kibana.yml配置文件

server.host: "192.168.30.135"
elasticsearch.url: "http://192.168.30.135:9200"
# 使用高德地图
tilemap.url: 'http://webrd02.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=7&x={x}&y={y}&z={z}'

x-pack插件安装

$ ./kibana-plugin list
x-pack@5.3.1

$ ./kibana-plugin install x-pack

直接在bin里面运行./kibana。

在浏览器里面输入localhost:5601进行访问 创建index的时候,记住查看elasticsearch里面的index值,一般的为logstash-* 下面是成功后查看到的日志信息

日志展示界面(lunce语法) 


x-pack界面界面 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值