设为首页 收藏本站
查看: 967|回复: 0

[经验分享] ELK+Filebeat+Nginx集中式日志解决方案(一)

[复制链接]

尚未签到

发表于 2018-11-11 10:22:24 | 显示全部楼层 |阅读模式
  一、使用说明:
  ELK 不是一款软件,而是 Elasticsearch、Logstash 和 Kibana 三种软件产品的首字母缩写。这三者都是开源软件,通常配合使用,而且又先后归于 Elastic.co 公司名下,所以被简称为 ELK Stack。根据 Google Trend 的信息显示,ELK Stack 已经成为目前最流行的集中式日志解决方案。

  •   Elasticsearch:分布式搜索和分析引擎,具有高可伸缩、高可靠和易管理等特点。基于 Apache Lucene 构建,能对大容量的数据进行接近实时的存储、搜索和分析操作。通常被用作某些应用的基础搜索引擎,使其具有复杂的搜索功能;
  •   Logstash:数据收集引擎。它支持动态的从各种数据源搜集数据,并对数据进行过滤、分析、丰富、统一格式等操作,然后存储到用户指定的位置;
  •   Kibana:数据分析和可视化平台。通常与 Elasticsearch 配合使用,对其中数据进行搜索、分析和以统计图表的方式展示;
  •   Filebeat:ELK 协议栈的新成员,一个轻量级开源日志文件数据搜集器,基于 Logstash-Forwarder 源代码开发,是对它的替代。在需要采集日志数据的 server 上安装 Filebeat,并指定日志目录或日志文件后,Filebeat 就能读取数据,迅速发送到 Logstash 进行解析,亦或直接发送到 Elasticsearch 进行集中式存储和分析。
  
  
  二、实验环境:
  
  架构图:
DSC0000.png

  4台服务器(centos 6.5 final版本):
192.168.1.194 (filebeat收集日志,nginx做为web服务器)  
192.168.1.195 (filebeat收集日志,nginx做为web服务器)
  
192.168.1.196 (logstash)
  
192.168.1.198(elasticsearch,kibana,nginx做方向代理)
  使用版本:
java-1.8.0-openjdk  
filebeat-5.2.2
  
logstash-5.2.2
  
elasticsearch-5.2.2
  
kibana-5.2.2
  
nginx-1.6.1
  三、安装配置:
  1、在192.168.1.194和192.168.1.195上面分别安装filebeat和nginx
  先安装java-1.8.0-openjdk,并关闭防火墙。
  安装之前可以删除之前的java版本:
for jdk_list in `rpm -qa | grep -E '^java'`  
do
  
    rpm -e --nodeps ${jdk_list}
  
done
  再安装java。
yum install -y java-1.8.0-openjdk  再安装filebeat:
  在elk官网上说明了很多中安装方法,具体详见https://www.elastic.co/guide/en/elastic-stack/current/installing-elastic-stack.html
  笔者这边选用最便捷的方式,yum源安装。操作方式如下:
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch  

  
vim /etc/yum.repos.d/elk.repo
  

  
[elasticsearch-5.x]
  
name=Elasticsearch repository for 5.x packages
  
baseurl=https://artifacts.elastic.co/packages/5.x/yum
  
gpgcheck=1
  
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
  
enabled=1
  
autorefresh=1
  
type=rpm-md
  然后就可以安装filebeat了,这里是用了官方提供的yum源安装的。
yum install filebeat -y  配置filebeat:
vim /etc/filebeat/filebeat.yml  

  
内容为:
  
filebeat.prospectors:
  
- input_type: log
  
  paths:
  
    - /usr/local/apps/nginx/logs/test_access.log
  
  tags: ["nginx-accesslog"]
  
  document_type: nginxaccess
  
- input_type: log
  
  paths:
  
    - /var/log/messages
  
  tags: ["sys-messages"]
  
  document_type: sysmessages
  
tags: ["nginx-test-194"]
  
output.logstash:
  
  hosts: ["192.168.1.196:5044"]
  其中path选项为filebeat发送给logstash的路径, 多个日志可以使用*.log通配. file不会自动递归日志目录下的子目录, 如果需要递归子目录可以使用类似 /var/log/*/*.log 的结构. tags选项会向log中添加一个标签, 此标签可以提供给logstash用于区分不同客户端不同业务的log. document_type作用相当于搞个标记一样,跟tags作用差不多,这里用于区别不通的日志来源,后面会用到。
  output指定发送log到哪台服务器的哪个服务, 默认输出到elasticsearch. 本例使用logstash, 所以需要注释掉发送到elasticsearch的配置, 并启用发送到logstash的配置.
  nginx的安装我就不说了,我是用ansible自动化安装的。very easy!而且这里也只是用作一个web服务器的作用,这里需要提一下的是,在配置nginx的时候,要统一一下所有nginx服务器的日志格式。我这里设定的nginx访问日志格式为:
  log_format  main  $time_local | $remote_addr | $http_host | $http_x_forwarded_for | $request_method | $request_uri | $server_protocol | $status | $body_bytes_sent | $http_referer | $http_user_agent | $request_time |;
  大家可以借鉴一下,然后自由发挥。
  都安装好了之后,就可以启动nginx和filebeat了,启动filebeat的方法可以使用
service filebeat start  2、在192.168.1.196上面安装logstash。
  现将jdk升级1.8.0,方法如上。关闭防火墙。
  yum源还是按照上面的方式安装,那么安装logstash,直接用命令:
yum install -y logstash  配置:
vim /etc/logstash/conf.d/test.conf  

  
内容为:
  
input {
  
    beats {
  
            port => 5044
  
    }
  
}
  

  
filter {
  if "nginx-accesslog" in [tags] {
  
        grok {
  
    match => { "message" => "%{HTTPDATE:timestamp}\|%{IP:remote_addr}\|%{IPORHOST:http_host}\|(?:%{DATA:http_x_forwarded_for}|-)\|%{DATA:request_method}\|%{DATA:request_uri}\|%{DATA:server_protocol}\|%{NUMBER:status}\|(?:%{NUMBER:body_bytes_sent}|-)\|(?:%{DATA:http_referer}|-)\|%{DATA:http_user_agent}\|(?:%{DATA:request_time}|-)\|"}
  
        }
  
        mutate {
  
                convert => ["status","integer"]
  
                convert => ["body_bytes_sent","integer"]
  
                convert => ["request_time","float"]
  
        }
  
        geoip {
  
                source=>"remote_addr"
  
        }
  
        date {
  
                match => [ "timestamp","dd/MMM/YYYY:HH:mm:ss Z"]
  
        }
  
        useragent {
  
                source=>"http_user_agent"
  
        }
  
}
  if "sys-messages"  in [tags] {
  
        grok {
  
                        match => { "message" => "%{SYSLOGLINE}" }
  
                        add_field => [ "received_at", "%{@timestamp}" ]
  
                        add_field => [ "received_from", "%{host}" ]
  
        }
  
        date {
  
                match => [ "timestamp", "MMM  d HH:mm:ss" ]
  
        }
  
        #ruby {
  
        #        code => "event['@timestamp'] = event['@timestamp'].getlocal"
  
        #}
  
}
  
}
  

  
output {
  
    elasticsearch {
  
      hosts => ["192.168.1.198:9200"]
  index => "logstash-%{type}-%{+YYYY.MM.dd}"
  document_type => "%{type}"
  
    }
  
    stdout { codec => rubydebug }
  
}
  这个配置文件涉及到的内容比较多,值得讲的为一下几点:

  •   在用正则匹配日志内容,并分割时,可以利用一下工具Grok Debugger ,logstash中grok定义好的正则,这个会大大简便你的匹配过程。
  •   index => "logstash-%{type}-%{+YYYY.MM.dd}" 这里的所以没有用logstash默认的索引模式(默认为这种格式logstash--%{+YYYY.MM.dd}),中间加了个%{type}变量,这样可以让不同的日志拥有不同的索引文件名,更好区分,这个在使用后面的kibana的时候,大家都好感觉出来了。
  logstash做下软连接,要不然找不到logstash这个命令:
ln -s /usr/share/logstash/bin/logstash /usr/bin/logstash  关于logstash命令的用法,请参照logstash -h
  值得说的几点:
  logstash -e 该参数允许Logstash直接通过命令行接受设置。这点尤其快速的帮助我们反复的测试配置是否正确而不用写配置文件。 如:
logstash -e 'input { stdin { } } output { stdout { codec => rubydebug } }'  logstash -f 从单个配置文件里面读取配置,并启动logstash:
logstash -f /etc/logstash/conf.d/nginx-test.conf  以这样的方式来启动logstash。
logstash  -t -f /etc/logstash/conf.d/nginx-test.conf  -t可以检查配置文件是否有错误,而无需启动logstash。
  从/etc/logstash目录中读取logstash.yml,并启动logstash:
logstash --path.settings /etc/logstash  nohup后台启动logstash,并使用nginx-test.conf的规则,和/etc/logstash/目录下的logstash.yml的配置:
nohup logstash -f /etc/logstash/conf.d/nginx-test.conf --path.settings /etc/logstash &  3、在192.168.1.196上面安装Elasticsearch,Kibana和nginx反向代理
  先将jdk升级1.8.0,方法如上。关闭防火墙。
  yum源还是按照上面的方式安装,那么安装Elasticsearch,Kibana,就直接用yum安装好了:
yum install -y elasticsearch kibana  nginx的安装还是用ansible自动化安装的。
  安装好elasticsearch,其他不需要改,因为logstash需要穿数据过来,所以需要修改一下监听的ip,
vim /etc/elasticsearch/elasticsearch.yml  

  
network.host: 0.0.0.0 #修改一下这个监听地址
  然后就可以启动elasticsearch:
service elasticsearch start  因为kibana,也不需要配置什么,保持默认值就可以启动kibana了:
service kibaka start  配置nginx方向代理,因为kibana监听的是127.0.0.1:5601端口,所以nginx配置文件如下。
upstream kinaba {  
                keepalive      400;
  
                #ip_hash;
  
                server  127.0.0.1:5601 max_fails=3  fail_timeout=30s;
  
        }
  
server  {
  
                    listen          8088;
  
                    server_name     192.168.1.198;
  
                    if (-d $request_filename) {
  
                        rewrite ^/(.*)([^/])$ http://$host/$1$2/ permanent;
  
                    }
  
                    location / {
  
                        proxy_pass              http://kinaba;
  
                        proxy_http_version 1.1;
  
                        proxy_set_header Connection "";
  
                        proxy_set_header        X-Real-IP  $remote_addr;
  
                        proxy_set_header        Host             $host;
  
                        proxy_set_header        X-Forwarded-For  $proxy_add_x_forwarded_for;
  
                    }
  
                    error_log           logs/kinaba._route_error.log;
  
                    access_log          logs/kinaba._route_access.log main;
  
}
  然后启动nginx,就可以通过地址http://192.168.1.198:8088/ 来访问了。具体kibana怎么玩,这里就不说了,kibana只是从elasticsearch检索数据然后显示出来而已,让数据库可视化。
  ok!到这里“ELK+Filebeat+Nginx集中式日志解决方案”就告一段落了,后续文章会加入Filebeat 与 Logstash 安全通信,elasticsearch集群,Kafka实时信息队列技术,还会加入zookeeper分布式服务框架等敬请关注。



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-633601-1-1.html 上篇帖子: Nginx演练(3)配置内容压缩 下篇帖子: zabbix监控之nginx状态监控(一)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表