一般我们需要进行日志分析场景:直接在日志文件中 grep、awk 就可以获得自己想要的信息。但在规模较大的场景中,此方法效率低下,面临问题包括日志量太大如何归档、文本搜索太慢怎么办、如何多维度查询。需要集中化的日志管理,所有服务器上的日志收集汇总。常见解决思路是建立集中式日志收集系统,将所有节点上的日志统一收集,管理,访问。 一般大型系统是一个分布式部署的架构,不同的服务模块部署在不同的服务器上,问题出现时,大部分情况需要根据问题暴露的关键信息,定位到具体的服务器和服务模块,构建一套集中式日志系统,可以提高定位问题的效率。
EFK是三个开源软件的缩写,分别表示:Elasticsearch , Logstash, Kibana , 它们都是开源软件。新增了一个FileBeat,它是一个轻量级的日志收集处理工具(Agent),Filebeat占用资源少,适合于在各个服务器上搜集日志后传输给Logstash,官方也推荐此工具。 Elasticsearch是个开源分布式搜索引擎,提供搜集、分析、存储数据三大功能。它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。 Logstash 主要是用来日志的搜集、分析、过滤日志的工具,支持大量的数据获取方式。一般工作方式为c/s架构,client端安装在需要收集日志的主机上,server端负责将收到的各节点日志进行过滤、修改等操作在一并发往elasticsearch上去。 Kibana 也是一个开源和免费的工具,Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助汇总、分析和搜索重要数据日志。
记得三台机器全部关掉防火墙
elasticsearch:是一个高度可扩展全文搜索和分析引擎,基于Apache Lucene 构建,能对大容量的数据进行接近实时的存储、搜索和分析操作,可以处理大规模日志数据,比如Nginx、Tomcat、系统日志等功能。
做之前先同步时间 1) yum -y install ntpdate 2) ntpdate pool.ntp.org 在做elasticsearch存储 1) rpm -ivh jdk-8u131-linux-x64_.rpm 2) yum -y install elasticsearch-6.6.2.rpm 3) vim /etc/elasticsearch/elasticsearch.yml 1. cluster.name: efk(第17行,修改的是集群名字) 2. node.name: node-1 (第23行) 3. network.host: 192.168.182.210(第55行,修改的自己IP) 4. http.port: 9200 (第59行,暴露端口) 5. discovery.zen.ping.unicast.hosts: ["192.168.182.210", "192.168.182.211"](第68行,添加集群里的所有IP) 4) systemctl restart elasticsearchreids:用一台服务器部署redis服务,专门用于日志缓存使用,一般用于web服务器产生大量日志的场景。 这里是使用一台专门用于部署redis ,一台专门部署了logstash,在linux-elk1 ELK集群上面进行日志收集存到了redis服务器上面,然后通过专门的logstash服务器去redis服务器里面取出数据在放到kibana上面进行展示
1)yum -y install gcc gcc-c++ 2)tar xzf redis-5.0.0.tar.gz 3)cp -r redis-5.0.0 /usr/local/redis 4)cd /usr/local/redis 5)make 6)ln -s /usr/local/redis/src/redis-server /usr/bin/redis-server 7) ln -s /usr/local/redis/src/redis-cli /usr/bin/redis-cli 8) vim /usr/local/redis/redis.conf 1. bind 192.168.182.210(第69行,修改自己的IP) 2. requirepass 123321(第508行,多添加一行密码) 9)redis-server /usr/local/redis/redis.conf 10) echo 511 > /proc/sys/net/core/somaxconn 11) echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf 12) echo "echo never > /sys/kernel/mm/transparent_hugepage/enabled" >> /etc/rc.local 13)vim /usr/local/redis/redis.conf 1.136行修改为yes 14)redis-server /usr/local/redis/redis.conffilebeat:是一个日志文件托运工具,在你的服务器上安装客户端后,filebeat会监控日志目录或者指定的任职文件,轻量级单用途的日志收集工具,用于在没有安装java的服务器上专门收集日志,可以将日志转发到logstash、elasticsearch或redis等场景中进行下一步处理。
#安装httpd 1) yum -y install httpd 2) systemctl start httpd 进入浏览器测试页面,多刷新页面几回 #安装filebeat收集httpd日志 1)yum -y install filebeat-6.8.1-x86_64.rpm 2)vim /etc/filebeat/filebeat.yml filebeat.inputs: - type: log enabled: true paths: - /var/log/httpd/access_log filebeat.config.modules: path: ${path.config}/modules.d/*.yml reload.enabled: false setup.ilm.enabled: false setup.template.name: "filebeat-httpd" setup.template.pattern: "filebeat-httpd-*" setup.template.settings: index.number_of_shards: 3 setup.kibana: output.redis: hosts: ["192.168.182.210:6379"] #redis服务器及端口 key: "filebeat-httpd" #这里自定义key的名称,为了后期处理 db: 1 #使用第几个库 timeout: 5 #超时时间 password: 123321 #redis 密码 processors: - add_host_metadata: ~ - add_cloud_metadata: ~ 3)systemctl restart filebeat 测试redis缓存收集到filebeat的日志没 1) redis-cli -h 192.168.182.210 192.168.182.210:6379> auth 123321 #登录的密码 OK 192.168.182.210:6379> get * #获取全部文件 (nil) 192.168.182.210:6379> KEYS * # (empty list or set) #看这块有没有收集到,没有收集到刷新httpd页面,如有(filebeat日志)的话可以不直线下面的 192.168.182.210:6379> SELECT 1 OK 192.168.182.210:6379[1]> KEYS * 1) "filebeat-httpd" #出现这个才算收集到httpd日志logstash:数据收集引擎。它支持动态的从各种数据源搜集数据,并对数据进行过滤、分析、丰富、统一格式等操作,然后存储到用户指定的位置;支持普通log、自定义json格式的日志解析。
1) yum -y install logstash-6.6.0.rpm 2)vim /etc/logstash/conf.d/httpd.conf input { redis { data_type => "list" host => "192.168.182.210" password => "123321" port => "6379" db => "1" key => "filebeat-httpd" } } output { elasticsearch { hosts => ["192.168.182.210:9200"] index => "redis-httpdlog-%{+YYYY.MM.dd}" } } 3) systemctl restart logstashkibana:数据分析和可视化平台。通常与 Elasticsearch 配合使用,对其中数据进行搜索、分析和以统计图表的方式展示。
1) yum -y install kibana-6.6.2-x86_64.rpm 1.server.port: 5601(第2行) 2.server.host: "192.168.182.210"(第7行,修改自己本机IP) 3.elasticsearch.hosts: ["http://192.168.182.210:9200"](第28行,修改自己的IP) 2) systemctl restart kibana
