ELK学习记录
是什么
Filebeat是一个轻量化的日志监测、传输工具,最大的特点就是性能稳定、配置简单、占用系统资源少。
架构
-
Prospector探测器
发现日志文件
-
Harvester收集器
收集发送日志



| IP地址 | 主机名 | 角色 | 所属集群 |
|---|---|---|---|
| 192.168.1.10 | filebeatserver | 业务服务器+filebeat | 业务服务器 |
| 192.168.1.20 | kafkazk1 | kafka+zookeeper | Kafka集群 |
| 192.168.1.30 | kafkazk2 | kafka+zookeeper | Kafka集群 |
| 192.168.1.40 | kafkazk3 | kafka+zookeeper | Kafka集群 |
| 192.168.1.50 | logstashserver | logstash | 数据转发 |
| 192.168.1.60 | server1 | ES Master,ES DataNode | ES集群 |
| 192.168.1.70 | server2 | ES Master,Kibana | ES集群 |
| 192.168.1.80 | server3 | ES Master,ES DataNode | ES集群 |
部署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}" } } }
6228

被折叠的 条评论
为什么被折叠?



