欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ELK安装

程序员文章站 2024-03-18 10:16:58
...

1.简介

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

ELK安装

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
aaa@qq.com

$ ./kibana-plugin install x-pack

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

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

日志展示界面(lunce语法) 

ELK安装

x-pack界面界面 ELK安装

ELK安装