ELK学习记录

ELK学习记录

是什么

Filebeat是一个轻量化的日志监测、传输工具,最大的特点就是性能稳定、配置简单、占用系统资源少。

架构

  • Prospector探测器

    发现日志文件

  • Harvester收集器

    收集发送日志

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

IP地址主机名角色所属集群
192.168.1.10filebeatserver业务服务器+filebeat业务服务器
192.168.1.20kafkazk1kafka+zookeeperKafka集群
192.168.1.30kafkazk2kafka+zookeeperKafka集群
192.168.1.40kafkazk3kafka+zookeeperKafka集群
192.168.1.50logstashserverlogstash数据转发
192.168.1.60server1ES Master,ES DataNodeES集群
192.168.1.70server2ES Master,KibanaES集群
192.168.1.80server3ES Master,ES DataNodeES集群

部署ELK集群

环境部署

  • 安装JDK

    yum -y install java-1.8.0-openjdk.x86_64 
    
  • 设置各主机间的免密登录

    设置公私钥
    ssh-keygen -t rsa
    把公钥传给其他主机
    ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.1.*
    
  • 安装Elasticsearch集群
    在这里插入图片描述

  • 安装Elasticsearch集群

    • 解压

      tar -axvf elasticsearch*
      

我们将ES安装到/usr/local/文件目录下,ES在5.0版本以后,为了安全,禁止使用root用户启动ES,需要重新创建用户来启动

useradd elastic
chown -R elastic:elastic /usr/local/elasticsearch/
  • 对elasic的优化

    • linux操作系统优化

      修改 /etc/sysctl.conf
      fs.file-max=655360   #配置系统最大打开的文件描述符数目,建议修改为655360或者更高
      vm.max_map_count=262144   #影响java线程数量,用于限制一个进程可以拥有的VMA(虚拟内存区域)的大小,系统默认65530,建议修改为262114或者更高
      
      另外,还需要调整进程最大打开文件描述符(nofile)、最大用户进程数(nproc)和最大锁定内存地址空间(memlock),添加如下内容到/etc/security/limits.conf文件中:
      * soft nproc   20480
      * hard nproc   20480
      * soft nofile  65536
      * hard nofile  65536
      * soft memlock unlimited
      * hard memlock unlimited
      
      最后,还需要修改/etc/security/limits.d/20-nproc.conf文件,将:
      soft nproc  4096
      修改为:
      soft nporc  20480
      或者直接删除这个文件也可以!
      加载配置:
      sysctl -p
      ulimit -a
      
      
      JVM调优
       需要调整的文件位于ES安装目录下面的conf目录下的jvm.options,打开以后的内容如下:
       -Xms4g
       -Xmx4g
       可以看到,默认的JVM内存为4G,可以根据服务器内存大小,修改为合适的值,一设置为服务器物理内存的一半为最佳!
      
    • 配置ES配置文件

      elasticsearch.yml文件
      cluster.name: elkbigdata  #配置ES集群的名称,如果在同一个网段下有多个集群,可以通过这个名称来区分不同集群
      node.name: ESserver1   #指定节点的名称,可以任意命名
      node.master: true    # 指定该节点是否有权利成为master,默认为true
      node.data: true    #指定该节点是否为存储索引的节点(数据节点),默认为true
      path.conf: /usr/local/elasticsearch/config  #设置配置文件的存储路径
      path.data:/path/to/data  #设置索引存储的路径,可以设置多个,不设置的话,默认存储到安装目录下的data目录
      path.logs: /path/to/logs  # 指定日志存储的路径,默认在安装目录下的log目录
      path.plugins:  # 插件的存放路径
      bootstrap.memory_lock: true #是否用来锁住物理内存,linux物理内存的效率远远高于swap内存,建议设置为true
      network.host: 0.0.0.0 #ES集群提供服务的IP
      http.port: 9200 #对外端口
      discovery.zen.minimum_master_nodes: 1 # 配置集群中最少的master节点数,master节点数不能低于这个值
      discovery.zen.ping.timeout: 3s #自动发现超时时间
      discovery.zen.ping.multicast.enabled: false #
      discovery.zen.ping.unicast.hosts: ["192.168.1.70:9300","192.168.1.80:9300","192.168.1.60:9300"] #master节点初始化列表
      

ELK(FileBeat+Zookeeper+Kafka+Logstash+Elasticsearch+Kibana)

ELK实战案例(收集Nginx调度器日志可视化案例)
  • Nginx的日志格式与日志变量

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 定义Nginx日志格式

    map $http_x_forwarded_for $clientRealIp {
    ""		$remote_addr;
    ~^(?P<firstAddr>[0-9\.]+),?.*$		$firstAddr;
    }
    
    log_format nginx_log_json
    '{"accessip_list:"$proxy_addr_x_forwarded-for","client_ip":"$clientRealIp","http_host":"$host","@timestamp":"$time_iso8601","method":"$request_method","url":"$request_uri","status":"$status","http_referer":"$http_referer","body_bytes_sent":"$body_bytes_sent","request_time":"$request_time","http_user_agent":"$http_user_agent","total_bytes_sent":"$bytes_sent","server_ip":"$server_addr"}';
    
    access_log		/var/log/nginx/logs/access.log			nginx_log_json;
    
  • 定义Logstash事件文件

    input{
            kafka{        
            bootstrap_servers=>"192.168.1.20:9092,192.168.1.30:9092,192.168.1.40:9092"
            topics=>["nginx_logs"]
            codec=> json {  #表明输入的数据是json格式,需要json解析
            		charset => "UTF-8" #解析特殊字段
            			}
            add_field => {"[@metadata][myid]" => "nginxaccess-log"} #增加一个字段,方便后面引用
            	}
            }
    
    
    filter{
    	if [@metadata][myid] == "nginxaccess-log" {
    	mutate {
    	gsub => ["message","\\x","\\\x"] #使中文可以正常显示的处理
    		  }
    	if ("method":"HEAD" in [message]) {
    	drop{} # 如果请求方法是HEAD则丢弃
    	}
    	json {
    	source => "message"  #引用字段,表示对那个字段进行解码
    	remove_field => "prospector"
    	remove_field => "beat"
    	remove_field => "source"
    	remove_field => "input"
    	remove_field => "offset"
    	remove_field => "fields"
    	remove_field => "host"
    	remove_field => "@version"
    	remove_field => "message" # 前面已经被解码,现在可以删除,不然就存储两份,浪费资源
    	}
    	}
    	}
    output{
       if [@metadata][myid] == "nginxaccess-log" {
            elasticsearch {
                    hosts => ["192.168.1.60:9200"]
                    index => "nginx_logs-%{+YYYY-MM-dd}"
            }
    }
    }
    
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值