基于Elasticsearch+Logstash+Kibana的小型流量分析系统

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介: 基于Elasticsearch+Logstash+Kibana的小型流量分析系统

总体流程

小型的流量分析系统,怎么来做,就讲解其中的一个做法和场景

1、一般来说,可以通过hive对昨日的流量日志数据,进行离线批处理,先预先按照维度将一些指标预先聚合出来,将结果写入mysql

默认有一些预先处理好的数据已经存在于mysql中了

2、我们手动准备一些样例数据,然后写入mysql中,装一个mysql,模拟成是hive导入mysql的一份数据

3、通过logstash,将mysql中的数据导入es中

4、通过kibana+各种es聚合语法,生成各种各样的报表出来

 

虚拟机环境搭建

1、在虚拟机中安装CentOS

启动一个virtual box虚拟机管理软件(vmware,早些年,发现不太稳定,主要是当时搭建一个hadoop大数据的集群,发现每次休眠以后再重启,集群就挂掉了)

virtual box,发现很稳定,集群从来不会随便乱挂,所以就一直用virtual box了

安装virtual box

用的是什么centos镜像,CentOS比较新的版本是7了,然后服务器上装操作系统的话,内存一般比较大,一般是安装64位的,32位的有一个最大内存4G的限制

(1)使用CentOS 7镜像即可,CentOS-7-x86_64-Minimal-1611.iso。

(2)创建虚拟机:打开Virtual Box,点击“新建”按钮,点击“下一步”,输入虚拟机名称为elasticsearch01,选择操作系统为Linux,选择版本为Red Hat-64bit,分配4096MB内存,后面的选项全部用默认,在Virtual Disk File location and size中,一定要自己选择一个目录来存放虚拟机文件,最后点击“create”按钮,开始创建虚拟机。

(3)设置虚拟机网卡:选择创建好的虚拟机,点击“设置”按钮,在网络一栏中,连接方式中,选择“Bridged Adapter”。

(4)安装虚拟机中的CentOS 7操作系统:选择创建好的虚拟机,点击“开始”按钮,选择安装介质(即本地的CentOS 7镜像文件),按照课程选择后自动安装即可

(5)安装完以后,CentOS会提醒你要重启一下,就是reboot,你就reboot就可以了。

(6)配置网络

vi /etc/sysconfig/network-scripts/ifcfg-enp0s3

先让它动态分配一个ip地址

ONBOOT=yes

service network restart

ip addr

再设置静态ip地址

BOOTPROTO=static
IPADDR=192.168.31.250
NETMASK=255.255.255.0 
GATEWAY=192.168.31.1 

service network restart

ip addr

配置DNS

检查NetManager的状态:systemctl status NetworkManager.service

检查NetManager管理的网络接口:nmcli dev status

检查NetManager管理的网络连接:nmcli connection show

设置dns:nmcli con mod enp0s3 ipv4.dns "114.114.114.114 8.8.8.8"

让dns配置生效:nmcli con up enp0s3

(7)配置hosts

vi /etc/hosts

配置本机的hostname到ip地址的映射

(8)配置SecureCRT

此时就可以使用SecureCRT从本机连接到虚拟机进行操作了

一般来说,虚拟机管理软件,virtual box,可以用来创建和管理虚拟机,但是一般不会直接在virtualbox里面去操作,因为比较麻烦,没有办法复制粘贴

SecureCRT,在windows宿主机中,去连接virtual box中的虚拟机

收费的,我这里有完美破解版,跟着课程一起给大家,破解

(9)关闭防火墙

systemctl stop firewalld.service
systemctl disable firewalld.service

关闭windows的防火墙

后面要搭建集群,有的大数据技术的集群之间,在本地你给了防火墙的话,可能会没有办法互相连接,会导致搭建失败

(10)配置yum

yum clean all
yum makecache
yum install wget

2、在每个CentOS中都安装Java

WinSCP,就是在windows宿主机和linux虚拟机之间互相传递文件的一个工具

(1)安装JDK

1、将jdk-8u131-linux-x64.rpm通过WinSCP上传到虚拟机中

2、安装JDK:rpm -ivh jdk-8u131-linux-x64.rpm

3、配置jdk相关的环境变量

vi .bashrc

export JAVA_HOME=/usr/java/latest

export PATH=$PATH:$JAVA_HOME/bin

source .bashrc

4、测试jdk安装是否成功:java -version

 

logstash部署以及上手使用

logstash,简单来说,就是用来从各种各样的数据源,采集数据,mysql,apache日志,mq,将数据进行一些简单的处理,然后将数据写入到其他的一些地方,比如es,mq

1、下载和解压缩logstash

2、logstash pipeline

两个组成部分:input和output,也可以包含一个可选的filter

input plugin负责从数据源中获取数据

filter plugin负责对数据进行定制化的处理和修改

output plugin负责将数据写入目的地中

3、运行最基础的logstash pipeline

bin/logstash -e 'input { stdin { } } output { stdout {} }'

-e:直接在命令行对logstash进行配置,从命令行接受输入,将输出写入命令行

输入:hello world,可以看到输出,logstash会补充timestamp和ip地址

用ctrl-d可以结束这个piepline

 

安装mysql以及手动导入样例数据

用最简单的方式装一个mysql数据库,然后后面的话,就有数据库可以用来开发了

wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm

rpm -ivh mysql-community-release-el7-5.noarch.rpm

yum install -y mysql-community-server

service mysqld restart

mysql -u root

set password for 'root'@'localhost' =password('123456..');

datekey cookie section userid province city pv is_return_visit is_bounce_visit visit_time visit_page_cnt

日期    cookie 版块    用户id 省份     城市 pv 是否老用户回访  是否跳出        访问时间   访问页面数量

CREATE TABLE `user_access_log_aggr` (
  `datekey` varchar(255) DEFAULT NULL,
  `cookie` varchar(255) DEFAULT NULL,
  `section` varchar(255) DEFAULT NULL,
  `userid` int(11) DEFAULT NULL,
  `province` varchar(255) DEFAULT NULL,
  `city` varchar(255) DEFAULT NULL,
  `pv` int(11) DEFAULT NULL,
  `is_return_visit` int(11) DEFAULT NULL,
  `is_bounce_visit` int(11) DEFAULT NULL,
  `visit_time` int(11) DEFAULT NULL,
  `visit_page_cnt` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
insert into user_access_log_aggr values('20171001', 'dasjfkaksdfj33', 'game', 1, 'beijing', 'beijing', 10, 0, 1, 600000, 3);
insert into user_access_log_aggr values('20171001', 'dasjadfssdfj33', 'game', 2, 'jiangsu', 'nanjing', 5, 0, 0, 700000, 5);
insert into user_access_log_aggr values('20171001', 'dasjffffksfj33', 'sport', 1, 'beijing', 'beijing', 8, 1, 0, 800000, 6);
insert into user_access_log_aggr values('20171001', 'dasjdddksdfj33', 'sport', 2, 'jiangsu', 'nanjing', 20, 0, 1, 900000, 7);
insert into user_access_log_aggr values('20171001', 'dasjeeeksdfj33', 'sport', 3, 'jiangsu', 'nanjing', 30, 1, 0, 600000, 10);
insert into user_access_log_aggr values('20171001', 'dasrrrrksdfj33', 'news', 3, 'jiangsu', 'nanjing', 40, 0, 0, 600000, 12);
insert into user_access_log_aggr values('20171001', 'dasjtttttdfj33', 'news', 4, 'shenzhen', 'shenzhen', 50, 0, 1, 500000, 4);
insert into user_access_log_aggr values('20171001', 'dasjfkakkkfj33', 'game', 4, 'shenzhen', 'shenzhen', 20, 1, 0, 400000, 3);
insert into user_access_log_aggr values('20171001', 'dasjyyyysdfj33', 'sport', 5, 'guangdong', 'guangzhou', 10, 0, 0, 300000, 1);
insert into user_access_log_aggr values('20171001', 'dasjqqqksdfj33', 'news', 5, 'guangdong', 'guangzhou', 9, 0, 1, 200000, 2);

使用logstash将mysql数据导入elasticsearch

1、安装es

adduser elasticsearch
passwd elasticsearch
chown -R elasticsearch /usr/local/elasticsearch

2、安装logstash-input-jdbc插件

yum install -y gem
gem sources --add https://ruby.taobao.org/ --remove https://rubygems.org/
gem sources -l
gem install bundler
bundle config mirror.https://rubygems.org https://ruby.taobao.org

在logstash目录下,vi Gemfile,修改 source 的值 为: "https://ruby.taobao.org"  或则 "https://gems.ruby-china.org"

在bin目录下,./logstash-plugin install --no-verify  logstash-input-jdbc

wget https://github.com/logstash-plugins/logstash-input-jdbc/archive/v4.2.4.zip
unzip master.zip
cd logstash-input-jdbc-master

vi Gemfile,修改 source 的值 为: "https://ruby.taobao.org" 或则 "https://gems.ruby-china.org"

vi logstash-input-jdbc.gemspec找到

   s.files = `git ls-files`.split($\)

改为:

s.files = [".gitignore", "CHANGELOG.md", "Gemfile", "LICENSE", "NOTICE.TXT", "README.md", "Rakefile", "lib/logstash/inputs/jdbc.rb", "lib/logstash/plugin_mixins/jdbc.rb", "logstash-input-jdbc.gemspec", "spec/inputs/jdbc_spec.rb"]
gem build logstash-input-jdbc.gemspec
mv logstash-input-jdbc-4.2.4.gem /usr/local/logstash/
plugin install logstash-input-jdbc-4.2.4.gem

3、启动logstash

在logstash的config目录中创建一份配置pipeline配置文件,user-access-log-pipeline.conf

input {
  jdbc {
  # mysql jdbc connection string to our backup databse
  jdbc_connection_string => "jdbc:mysql://localhost:3306/eshop"
  # the user we wish to excute our statement as
  jdbc_user => "root"
  jdbc_password => "123456.."
  # the path to our downloaded jdbc driver
  jdbc_driver_library => "/usr/local/mysql-connector-java-5.1.36-bin.jar"
  # the name of the driver class for mysql
  jdbc_driver_class => "com.mysql.jdbc.Driver"
  jdbc_paging_enabled => "true"
  statement => "SELECT * from user_access_log_aggr"
  schedule => "* * * * *"
  type => "jdbc"
  }
}
output {
  elasticsearch {
    hosts => ["127.0.0.1:9200"]
    index => "user_access_log_aggr"
  }
}

运行下面的命令检查配置文件语法是否正确:bin/logstash -f config/user-access-log-pipeline.conf --config.test_and_exit

启动logstash:bin/logstash -f config/user-access-log-pipeline.conf --config.reload.automatic

--config.reload.automatic,会自动重新加载配置文件的内容

备注:windows下的logstash执行后老是出现 {:reason=>"Expected one of #, if, \", ', } at line 2, column 1 (byte 9) after input {\n"}

后来发现是复制的文本中存在Unicode编码的垃圾字符

 

安装和部署kibana

1、下载kibana

从kibana官网下载,并且解压缩

./bin/kibana,即可运行kibana,用ctrl+c可以终止kibana进程

2、配置kibana

在$KIBANA_HOME/config/kibana.yml文件中可以对kibana进行配置

server.port

server.host

elasticsearch.url

3、访问kibana web管理工作台

默认通过5601端口进行访问,通过浏览器访问即可

4、设置index pattern

我们需要为kibana配置一个index pattern来匹配es中的索引名称,默认是logstash-*,匹配logstash写入es中的数据

同时还要配置一个time-field name,那个field是timestamp类型的,这是给kibana用来按照时间进行过滤的,kibana会自动加载出来给我们选择

 

基于kibana制作网站流量分析报表

对指定的版块进行查询,然后统计出如下指标的汇总

pv: 所有人的pv相加

uv: 对userid进行去重

return_visit_uv: 回访uv

total_visit_time: 总访问时长

bounce_visit_uv: 跳出次数

curl -XGET 'http://localhost:9200/logstash-2017.10.14/logs/_search?q=section:news&pretty' -d '
{
    "size": 0,
    "aggs": {
        "pv": {
            "sum": {
                "field": "pv"
            }
        },
        "uv": {
            "cardinality": {
                "field": "userid",
                "precision_threshold": 40000
            }
        },
        "total_visit_time": {
            "sum": {
                "field": "visit_time"
            }
        },
        "return_visit_uv": {
            "filter": {
                "term": {
                    "is_return_visit": 1
                }
            },
            "aggs": {
                "total_return_visit_uv": {
                    "cardinality": {
                        "field": "userid",
                        "precision_threshold": 40000
                    }
                }
            }
        },
        "bounce_visit_uv": {
            "filter": {
                "term": {
                    "is_bounce_visit": 1
                }
            },
            "aggs": {
                "total_bounce_visit_uv": {
                    "cardinality": {
                        "field": "userid",
                        "precision_threshold": 40000
                    }
                }
            }
        }
    }
}'

 


相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
20天前
|
数据可视化 索引
elasticsearch head、kibana 安装和使用
elasticsearch head、kibana 安装和使用
|
1月前
|
监控 安全 Linux
【Elasticsearch专栏 14】深入探索:Elasticsearch使用Logstash的日期过滤器删除旧数据
使用Logstash的日期过滤器可以有效删除Elasticsearch中的旧数据,释放存储空间并提高集群性能。通过配置Logstash,可以指定索引模式、筛选时间戳早于特定阈值的文档,并在输出阶段删除这些旧数据。执行配置时,需确保Logstash与Elasticsearch连接正常,并监控日志以确保操作安全。定期执行此操作可确保旧数据不会过多积累。总之,Logstash的日期过滤器提供了一种简单而高效的方法,帮助管理和优化Elasticsearch中的数据。
|
3月前
|
自然语言处理 API 索引
Elasticsearch Analyzer原理分析并实现中文分词
Elasticsearch Analyzer原理分析并实现中文分词
74 0
|
4月前
|
JavaScript 大数据 Python
原生大数据|elasticSearch|低版本kibana组件的汉化
原生大数据|elasticSearch|低版本kibana组件的汉化
29 0
|
6月前
|
人工智能 数据可视化 Java
ElasticSearch安装、插件介绍及Kibana的安装与使用详解
ElasticSearch安装、插件介绍及Kibana的安装与使用详解
ElasticSearch安装、插件介绍及Kibana的安装与使用详解
|
4月前
|
搜索推荐 Java 数据处理
Elasticsearch搜索分析引擎本地部署与远程访问
Elasticsearch搜索分析引擎本地部署与远程访问
|
6月前
|
安全 Java Linux
ElasticSearch第四讲:ES详解:ElasticSearch和Kibana安装
ElasticSearch第四讲:ES详解:ElasticSearch和Kibana安装
205 0
|
3月前
|
存储 自然语言处理 Java
Elasticsearch全文搜索技术之二kibana的简介和使用
Elasticsearch全文搜索技术之二kibana的简介和使用
29 2
|
4月前
elasticsearch7.x kibana的常用DSL(自己练习的)
elasticsearch7.x kibana的常用DSL(自己练习的)
|
4月前
|
数据可视化 Java 关系型数据库
Elasticsearch【环境搭建 02】最新版 elasticsearch + kibana(7.15.0)安装、配置、启动(多个问题处理 + kibana仪表盘使用举例)
Elasticsearch【环境搭建 02】最新版 elasticsearch + kibana(7.15.0)安装、配置、启动(多个问题处理 + kibana仪表盘使用举例)
87 0

热门文章

最新文章