ELK流量分析
1 | 服务器环境:Centos7 |
ELK流量分析流程
1 | 1.通过hive对昨日的流量日志数据,进行离线批处理,按维度将一些指标预先聚合出来,将结果写入mysql,默认有一些预先处理好的数据已经存在mysql |

安装Logstash
创建目录
1 | [root@elasticsearch01 ~]# mkdir -p /data/server |
解压压缩文件
1 | tar -zxvf logstash-5.6.3.tar.gz -C /data/server/ |
logstash pipeline
1 | 两个组成部分:input和output,也可以包含一个可选的filter |
1 | input plugin负责从数据源中获取数据 |
运行最基础的logstash pipeline
1 | ./bin/logstash -e 'input { stdin { } } output { stdout {} }' |

-e:直接在命令行对logstash进行配置,从命令行接受输入,将输出写入命令行
输入:hello world,可以看到输出,logstash会补充timestamp和ip地址

用ctrl-d可以结束这个piepline
安装Mysql
1 | wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm |
重启mysql服务
1 | service mysqld restart |

设置mysql密码
1 | mysql -u root |
登录mysql
1 | mysql -u root -p123456 |
创建数据库
1 | mysql> create database patpat_demo; |
使用数据库
1 | use patpat_demo; |
1 | datekey cookie section userid province city pv is_return_visit is_bounce_visit visit_time visit_page_cnt |
创建表
1 | create table user_access_log_aggr ( |
插入数据
1 | insert into user_access_log_aggr values('20171001', 'dasjfkaksdfj33', 'game', 1, 'beijing', 'beijing', 10, 0, 1, 600000, 3); |
安装ElasticSearch
解压压缩文件
1 | tar -zxvf elasticsearch-5.6.3.tar.gz -C /data/server/ |
1 | [root@elasticsearch01 server]# mv elasticsearch-5.6.3/ elasticsearch |
修改es配置文件
1 | cd /data/server/elasticsearch |
编辑<elasticsearch根目录>/config/jvm.options配置文件
1 | [elasticsearch@elasticsearch01 elasticsearch]$ vi config/jvm.options |
1 | -Xms512m |
编辑<elasticsearch根目录>/config/elasticsearch.yml配置文件
1 | [elasticsearch@elasticsearch01 elasticsearch]$ vi config/elasticsearch.yml |
1 | path.data: /data/server/elasticsearch/data |
启动es
1 | cd /data/server/elasticsearch |
1 | ./bin/elasticsearch -d |

在浏览器地址栏查看:http://192.168.31.180:9200/

1 | [elasticsearch@elasticsearch01 ~]$ curl -XGET localhost:9200 |

查看日志
1 | cd /data/server/elasticsearch |
1 | tail -f elasticsearch.log |

安装logstash-input-jdbc插件
1 | yum install -y gem |
1 | gem sources --add https://ruby.taobao.org/ --remove https://rubygems.org/ |

1 | gem install bundler |

1 | bundle config mirror.https://rubygems.org https://ruby.taobao.org |

在logstash目录下,编辑Gemfile文件
1 | 在logstash目录下,vi Gemfile,修改source的值为: "https://ruby.taobao.org" |

1 | [elasticsearch@elasticsearch01 logstash]$ vi Gemfile |
安装Logstash插件
1 | [elasticsearch@elasticsearch01 logstash]$ ./bin/logstash-plugin install logstash-input-jdbc |

1 | wget https://github.com/logstash-plugins/logstash-input-jdbc/archive/v4.2.4.zip |

1 | cd logstash-input-jdbc-4.2.4 |
修改source的值
修改source的值为: “https://ruby.taobao.org"
1 | vi Gemfile |

1 | vi logstash-input-jdbc.gemspec |
1 | 找到 |

1 | gem build logstash-input-jdbc.gemspec |

1 | mv logstash-input-jdbc-4.2.4.gem /data/server/logstash/ |
1 | [elasticsearch@elasticsearch01 logstash-input-jdbc-4.2.4]$ cd /data/server/logstash |

启动logstash
1 | 在logstash目录中创建一份配置pipeline配置文件 |
1 | vi conf/user-access-log-pipeline.conf |
1 | input { |

检查配置文件语法是否正确
1 | [elasticsearch@elasticsearch01 logstash]$ ./bin/logstash -f conf/user-access-log-pipeline.conf --config.test_and_exit |

启动logstash
1 | --config.reload.automatic,会自动重新加载配置文件的内容 |
1 | ./bin/logstash -f conf/user-access-log-pipeline.conf --config.reload.automatic |


查看ES索引
1 | [elasticsearch@elasticsearch01 ~]$ curl -XGET localhost:9200/_cat/indices |

查看es健康状态
1 | [elasticsearch@elasticsearch01 ~]$ curl -XGET localhost:9200/_cat/health |

1 | [elasticsearch@elasticsearch01 ~]$ curl -XGET localhost:9200/logstash-2017.12.21 |

1 | [elasticsearch@elasticsearch01 ~]$ curl -XGET localhost:9200/logstash-2017.12.21/_search?pretty |


安装和部署kibana
kibana解压缩
1 | tar -zxvf kibana-5.6.3-linux-x86_64.tar.gz -C /data/server/ |
目录重命名
1 | [root@elasticsearch01 server]# mv kibana-5.6.3-linux-x86_64/ kibana |
配置kibana
1 | [root@elasticsearch01 kibana]# vi config/kibana.yml |
1 | server.port: 5601 |
运行kibana
1 | [root@elasticsearch01 kibana]# ./bin/kibana |

访问kibana web管理工作台
1 | 访问浏览器地址栏:http://192.168.31.180:5601/ |

设置index pattern
在kibana配置一个index pattern来匹配es中的索引名称,默认是logstash-*,匹配logstash写入es中的数据
同时还要配置一个time-field name,那个field是timestamp类型的,这是给kibana用来按照时间进行过滤的,kibana会自动加载出来给我们选择

基于kibana制作流量分析报表
对指定的版块进行查询,然后统计出如下指标的汇总
1 | pv: 所有人的pv相加 |
1 | curl -XGET 'http://localhost:9200/logstash-2017.12.21/logs/_search?q=section:news&pretty' -d ' |


Logstash处理数据
1 | input段: |
查看Logstash插件
1 | [elasticsearch@elasticsearch01 logstash]$ bin/logstash-plugin list |

安装Logstash插件
grok:数据结构化转换工具
match:匹配条件格式,将nginx日志作为message变量,并应用grok条件NGINXACCESS进行转换
1 | [elasticsearch@elasticsearch01 logstash]$ ./bin/logstash-plugin install logstash-filter-grok |

geoip:该过滤器从geoip中匹配ip字段,显示该ip的地理位置
1 | [elasticsearch@elasticsearch01 logstash]$ ./bin/logstash-plugin install logstash-filter-geoip |

Filebeat采集数据传送给Logstash

FileBeat的四种输出方式可以输出到
1 | Elasticsearch,logstash,file和console |
解压压缩文件
1 | tar -zxvf filebeat-5.6.3-linux-x86_64.tar.gz -C /data/server/ |
目录重命名
1 | [elasticsearch@elasticsearch01 server]$ mv filebeat-5.6.3-linux-x86_64/ filebeat |
进入目录
1 | [elasticsearch@elasticsearch01 server]$ cd filebeat/ |
1 | [elasticsearch@elasticsearch01 filebeat]$ mkdir conf |
编辑配置文件
1 | [elasticsearch@elasticsearch01 filebeat]$ vim conf/filebeat-to-logstash.yml |
1 | filebeat.prospectors: |
授权
1 | chmod go-w /data/server/filebeat/conf/filebeat-to-logstash.yml |
启动
1 | [elasticsearch@elasticsearch01 filebeat]$ ./filebeat -e -c conf/filebeat-to-logstash.yml |

Logstash获取filebeat传送来的数据并输出到控制台
1 | vim conf/filebeat-logstash.conf |
1 | input { |
启动Logstash
1 | ./bin/logstash -f conf/filebeat-logstash.conf |

Logstash获取filebeat传送来的数据并转发到kafka
1 | vim conf/logstash-kafka.conf |
1 | input { |
启动Logstash
1 | ./bin/logstash -f conf/logstash-kafka.conf |
Logstash采集文件数据并将结果输出到控制台
1 | [elasticsearch@elasticsearch01 logstash]$ vim conf/first-pipeline.conf |
1 | input { |
启动logstash
1 | [elasticsearch@elasticsearch01 logstash]$ ./bin/logstash -f conf/first-pipeline.conf |

Logstash采集文件数据并将结果输出到ES
1 | [elasticsearch@elasticsearch01 logstash]$ vim conf/first-pipeline-to-es.conf |
1 | input { |
启动logstash
1 | [elasticsearch@elasticsearch01 logstash]$ ./bin/logstash -f conf/first-pipeline-to-es.conf |

查看ES索引
1 | [elasticsearch@elasticsearch01 logs]$ curl -XGET localhost:9200/_cat/indices?v |

1 | [elasticsearch@elasticsearch01 logs]$ curl -XGET localhost:9200/logstash-nginx-access-2017.12.24/_search?pretty |
启动Kibana
1 | [elasticsearch@elasticsearch01 kibana]$ ./bin/kibana |
在浏览器地址栏访问:http://192.168.31.180:5601/

本文作者 : Matrix
原文链接 : https://matrixsparse.github.io/2017/12/21/ELK流量分析/
版权声明 : 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!
知识 & 情怀 | 二者兼得