yum安装ELK-安装部署

ELK+filebeat+redis架构

es+kibana:192.168.0.56     es创建索引/存储,kibana展示

logstash:192.168.0.57        日志正则过滤

redis:192.168.0.34              消息队列(缓冲)

filebeat:192.168.0.32/33     收集nginx日志

nginx:192.168.0.32             nginx反向代理

一、安装

ELK依赖jdk,jdk安装参考:https://blog.csdn.net/weixin_41988331/article/details/90261370

准备环境:centos6/7,全部采用yum/rpm安装,其中es需要大磁盘存放数据,默认数据存放路径为/var/lib/elasticsearch,可自行更改

ELK+filebeat:所有版本均为此刻最新的6.6.1,官网直接下载rpm包,然后直接yum/rpm安装,其中es/kibana/filebeat,service/systemctl命令添加到开机自启,logstash通过rc.local实现开机自启

官网下载地址:https://www.elastic.co/cn/downloads/

elasticsearch安装:

准备:修改系统配置,es对系统参数有要求

# vim /etc/sysctl.conf
vm.max_map_count = 655360    #定义了一个进程能拥有的最多的内存区域
# sysctl -p


# vim /etc/security/limits.conf      #文件描述符
* soft nofile 65535
* hard nofile 65535


# vim /etc/security/limits.d/20-nproc.conf
*          soft    nproc     4096
root       soft    nproc     unlimited

为什么要限制打开的文件描述符?
原因1 – 资源问题:每个打开的文件都需要消耗内存来管理,而内存是有限的。
原因2 – 安全问题:如果不限制的话,有不怀好心的人启动一个进程来无限的创建和打开新的文件,会让服务器崩溃。
所以限制文件描述符的数量对于linux系统的稳定性是非常重要的。

直接yum install elasticsearch.xxx.rpm或者rpm -ivh elasticsearch.xxx.rpm

修改配置:

# vim /etc/elasticsearch/elasticsearch.yml

单点配置

cluster.name: tx-elk
node.name: node-1
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
network.host: 192.168.0.56
http.port: 9200
#集群节点列表,用逗号隔开
discovery.zen.ping.unicast.hosts: ["192.168.0.56"]
#集群中过半投票才能选为master,如3个节点,此处为2,5个节点,此处为3
discovery.zen.minimum_master_nodes: 1


#是否支持跨域,默认为false
http.cors.enabled: true
#当设置允许跨域,默认为*,表示支持所有域名,如果我们只是允许某些网站能访问,那么可以使用正则表达式。比如只允许本地地址
http.cors.allow-origin: "*"

集群配置:修改以下三项

node.name: node-1

discovery.zen.ping.unicast.hosts: ["192.168.0.56"]

discovery.zen.minimum_master_nodes: 1

# systemctl start elasticsearch

# systemctl enable elasticsearch

kibana安装与配置:

直接yum install kibana.xxx.rpm或者rpm -ivh kibana.xxx.rpm

修改配置:

# vim /etc/kibana/kibana.yml

server.port: 5601

server.host: "0.0.0.0"

elasticsearch.hosts: ["http://192.168.0.56:9200"] #ES集群中任一es即可

# systemctl start kibana

# systemctl enable kibana

logstash安装

logstash配置修改后,特别是索引匹配修改后,需重启es

直接rpm安装即可,可执行文件路径如下,添加到ENV:

/usr/share/logstash/bin/logstash -f filebeat-redis-logstash.conf

remove_field =>["message"]

https://blog.csdn.net/zhaoyangjian724/article/details/54343178

geoip

https://blog.csdn.net/wanglei_storage/article/details/82663184

grok参考

https://www.jianshu.com/p/134d0f9a367a

https://www.cnblogs.com/lize3379/p/6118788.html

https://blog.csdn.net/mergerly/article/details/53310806

http://grokdebug.herokuapp.com/

http://grok.ctnrs.com/

最终filebeat-redis-logstash.conf配置如下:目前在做了收集nginx日志,后续会做收集tomcat日志的grok匹配规则

其中nignx的日志格式:

    log_format    main  '$remote_addr $remote_user [$time_local] $request '
                        '$status $body_bytes_sent $http_referer "$upstream_response_time" $request_time '
                        '"$http_user_agent" $http_x_forwarded_for $http_host "$upstream_addr" "$http_auth_token"';

# 因upstream地址池中server个数有多个,在后端故障时,$upstream_response_time、$upstream_addr会有server个数个结果,并以逗号隔开,如0.000, 0.000以及1.1.1.1, 1.1.1.2,所以这两处同$http_user_agent一样用引号并在一起
#用于nginx日志+tomcat日志
input {
    redis {
        host => "192.168.0.57"
        port => 6379
        password => "Tx.123456"
        db => "0"
        data_type => "list"
        key => "logstash"
    }
}

filter {
  grok {
    match => {
      "message" => "%{IP:ip} %{USER:auth} \[%{HTTPDATE:timestamp}\] %{WORD:request_method} %{URIPATHPARAM:uri} HTTP/%{NUMBER:http_version} %{NUMBER:status} %{NUMBER:filesize} (?:%{URI:referrer}|-) \"%{GREEDYDATA:upstream_time}\" %{NUMBER:request_time} \"%{GREEDYDATA:ua}\" (?:%{IP:x_forward}|-) %{HOSTNAME:domain} \"%{GREEDYDATA:upstream_host}\" \"%{GREEDYDATA:auth_token}\""
    }
    remove_field =>["message", "port", "auth_token"]
  }
  #mutate {
  #  remove_field =>["message", "port"]
  #remove_field =>["port", "auth_token"]
  #}
  #geoip {
  #  source => "client"
  #  database => "/etc/logstash/GeoLite2-City_20190326/GeoLite2-City.mmdb"
  #  fields => ["country_name","region_name", "city_name"]
  #}
}

output {
    if "nginx-prod" in [tags] {
       elasticsearch {
           hosts => ["192.168.0.57:9200"]
           index => "nginx-prod-%{+YYYY.MM.dd}"
       }
    }
    if "nginx-beta" in [tags] {
       elasticsearch {
           hosts => ["192.168.0.57:9200"]
           index => "nginx-beta-%{+YYYY.MM.dd}"
       }
    }
    if "nginx-test" in [tags] {
       elasticsearch {
           hosts => ["192.168.0.57:9200"]
           index => "nginx-test-%{+YYYY.MM.dd}"
       }
    }
    if "tomcat-uc" in [tags] {
       elasticsearch {
           hosts => ["192.168.0.57:9200"]
           index => "tomcat-uc-%{+YYYY.MM.dd}"
       }
    }
}

redis安装与配置

【若日志量大,redis可提高配置纵向扩展,也可做集群或者单纯增加redis数量进行横向扩展(不同日志发到不同redis、logstash),若日志量超大,也可换成zookeeper+kafka集群】

版本3.2,直接yum安装,service/systemctl命令添加到开机自启,修改以下两处,让除自己以外的机器访问,以及设置连接密码

#vim /etc/redis.conf

bind 0.0.0.0

requirepass Tx.123456

使用及验证:

# redis-cli -h 192.168.0.34 -a Tx.123456

192.168.0.34>keys *

(logstash) 在filebeat中创建的索引名logstash,出现则为说明filebeat收集到的信息成功导入到了redis中

filebeat安装与配置:

直接通过rpm包yum/rpm安装即可,若filebeat->logstash进行测试,直接将Logstash output部分取消注释,将其他redis output 部分注释,若filebeat->redis->logstash,则不更改此配置文件

filebeat.inputs:

#======== nginx访问日志 =============
- type: log
  enabled: true
  paths:
    - /apps/log/nginx/*.access.log
  tags: ["nginx-prod"]


#======== Java类日志,以年月日开头 =============
- type: log
  enabled: true
  paths:
    - /apps/logs/xxx/error.log
  multiline.pattern: '^\d{4}'
  multiline.negate: true
  multiline.match: after
  tags: ["dev-xx-module-auth"]


#============================= Filebeat modules ===============================
filebeat.config.modules:
  path: ${path.config}/modules.d/*.yml
  reload.enabled: false
setup.kibana:
#================================ Outputs =====================================
#-------------------------- redis output ------------------------------------
output.redis:
    hosts: ["192.168.0.57"]
    port: 6379
    password: "Tx.123456"
    key: "logstash"
    db: 0
    timeout: 5
    data_type: "list"


#----------------------------- Logstash output --------------------------------
#output.logstash:
  # The Logstash hosts
  #hosts: ["192.168.0.57:5044"]
  #index: log

# systemctl start filebeat

# systemctl enable filebeat

filebeat配置拓展

# 在输入中排除符合正则表达式列表的那些行,paths后添加
exclude_lines: ["^DBG"]

如线上将DEBUG级别的tomcat日志全部去掉了
exclude_lines: ["DEBUG"]

多日志文件合并为一个的
 paths:
    - /var/log/java/test-java.log
    - /var/log/java/*.log
    - /var/log/*/*.log

多日志文件单独的,直接复制整个type

#======== Java类日志,以年月日开头 =============
- type: log
  enabled: true
  paths:
    - /apps/logs/xxx/error.log    
  multiline.pattern: '^\d{4}'    #正则匹配,如此处以年开头的4位整数,也有以'\[',即以[开头的
  multiline.negate: true
  multiline.match: after
  tags: ["dev-xx-module-auth"]

negate有false和true两种取值,match也有after和before两种取值。下面详述:

negate参数为false,表示“否定参数=false”。multiline多行参数负负得正,表示符合pattern、match条件的行会融入多行之中、成为一条完整日志的中间部分。如果match=after,则以xx开头的和前面一行将合并成一条完整日志;如果match=before,则以b开头的和后面一行将合并成一条完整日志。

negate参数为true,表示“否定参数=true”。multiline多行参数为负,表示符合match条件的行是多行的开头,是一条完整日志的开始或结尾。如果match=after,则以xx开头的行是一条完整日志的开始,它和后面多个不以xx开头的行组成一条完整日志;如果match=before,则以xx开头的行是一条完整日志的结束,和前面多个不以xx开头的合并成一条完整日志。

本例中使用multiline.negate: true和multiline.match: after,合起来的意思就是符合multiline.pattern: '^\d{4}'作为一条完整日志的开始,后面的不以4位整数开头的,直到下一个4位整数开头的日志之前的内容都合并到这条日志的后面,算作一条日志
如典型的java日志:
2019-11-14 10:37:30.460 [xxxx_80-506217ce-807d-433b-9051-918b05682b50] [] ERROR com.xxx.client.config.impl.ClientWorker - [fixed-xxx_80-506217ce-807d-433b-9051-918b05682b50] [check-update] get changed dataId exception
java.net.SocketException: Unexpected end of file from server
        at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:851)
        at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:678)
        at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:848)
        at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:678)


关于negate和match的原文链接:https://blog.csdn.net/xh6312643/article/details/80216153

nginx反向代理kibana

server {
        listen       80;
        server_name  log.xxx.com;
        access_log   /etc/nginx/logs/log.xxx.com.access.log main;

        location / {
            proxy_pass http://192.168.0.56:5601;
        }
}

其他elk问题:

https://mp.weixin.qq.com/s/1AkefESGeeEyoCV9gkbLLA

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值