
本文将配合 Rancher 1.6 讲解如何搭建并配置日志错误上报框架 Sentry 及网站统计分析框架 matomo 的搭建及接入 vue(本文以 iview-admin 为例)项目。
背景简述
sentry 项目运行过程中,难免出现 bug,前端不像后端可以很方便的采集项目日志(比如,log4j + elk),导致每次出问题后还原车祸现场费时费力。另外,随着 vue 等框架的兴起,构建项目时打成 min.js,无疑又加大了前端定位问题的难度。而 sentry 是一款专注于错误采集的框架,支持常见的主流语言(如下图所示):
可以采集,聚合,并推送错误信息。注意,sentry 并不是日志平台(e.g. log4j + elk),也不是监控平台,sentry 专注于项目中的 Error 信息的采集,聚合,报警。
matomo 的前身是 Pwiki,这是一款开源的 web 网站分析利器。类似于 Google Analytics。其具体的特性,参见 Premium Web Analytics ,比如绘制页面热力图,录制会话,访问漏斗,A/B Test 等(这几样都是收费插件功能)。
注意:本文假设你已经有 rancher1.6 的环境
安 装
matomo
rancher 创建 matomo
在 rancher 主机上
## 创建必要文件夹mkdir -p /data/matomo/{config,logs,php,maxmind}/
## 安装maxmind ip数据库wget -P /tmp/ https://github.com/maxmind/geoipupdate/releases/download/v4.0.3/geoipupdate_4.0.3_linux_amd64.debdpkg -i /tmp/geoipupdate_4.0.3_linux_amd64.debmv /etc/GeoIP.conf{,.bak}cat << EOF | sudo tee -a /etc/GeoIP.confAccountID 0LicenseKey 000000000000EditionIDs GeoLite2-Country GeoLite2-City GeoLite2-ASNDatabaseDirectory /data/matomo/maxmindEOF
## 下载最新maxmind数据库geoipupdatels -lah /data/matomo/maxmind/总用量 67Mdrwxr-xr-x 2 root root 4.0K 7月 7 17:25 .drwxr-xr-x 6 root root 4.0K 7月 7 17:23 ..-rw------- 1 root root 0 7月 7 17:25 .geoipupdate.lock-rw-r--r-- 1 root root 6.3M 7月 7 17:25 GeoLite2-ASN.mmdb-rw-r--r-- 1 root root 57M 7月 7 17:25 GeoLite2-City.mmdb-rw-r--r-- 1 root root 3.7M 7月 7 17:25 GeoLite2-Country.mmdb
## 定时更新ip数据库cat << EOF | sudo tee -a /etc/cron.d/geoipupdate50 2 * * 4 root /usr/bin/geoipupdateEOF
## 设置php.inicat << EOF | sudo tee -a /data/matomo/php/php.iniupload_max_filesize = 128Mpost_max_size = 128Mmax_execution_time = 200memory_limit = 256MEOF
docker-compose.yaml
version: '2'services: matomo: image: matomo:latest stdin_open: true volumes: - /data/matomo/config:/var/www/html/config - /data/matomo/logs:/var/www/html/logs - /data/matomo/php/php.ini:/usr/local/etc/php/php.ini - /data/matomo/maxmind/GeoLite2-City.mmdb:/var/www/html/misc/GeoLite2-City.mmdb - /data/matomo/maxmind/GeoLite2-Country.mmdb:/var/www/html/misc/GeoLite2-Country.mmdb - /data/matomo/maxmind/GeoLite2-ASN.mmdb:/var/www/html/misc/GeoLite2-ASN.mmdb tty: true ports: - 80:80/tcp - 443:443/tcp
rancher-compose.yaml
version: '2'services: matomo: scale: 1 start_on_create: true health_check: response_timeout: 2000 healthy_threshold: 2 port: 80 unhealthy_threshold: 3 initializing_timeout: 60000 interval: 2000 strategy: recreate reinitializing_timeout: 60000
配置 matomo
选择中文
系统检查
配置数据库
自动建表完成
创建管理员用户
设置分析网站(可以随便创建,后边再进行修改),注意跟进实际情况修改时区
复制跟踪代码
配置 matomo
登录
Sentry
rancher 创建 Sentry
docker-compose.yml
version: '2'services: cron: image: sentry:9 environment: SENTRY_MEMCACHED_HOST: memcached SENTRY_REDIS_HOST: redis SENTRY_POSTGRES_HOST: postgres SENTRY_EMAIL_HOST: smtp SENTRY_SECRET_KEY: SENTRY_SECRET_KEY_XXX stdin_open: true volumes: - /data/sentry-data:/var/lib/sentry/files - /data/sentry-data/config.yml:/etc/sentry/config.yml tty: true command: - run - cron memcached: image: memcached:1.5-alpine web: image: sentry:9 environment: SENTRY_MEMCACHED_HOST: memcached SENTRY_REDIS_HOST: redis SENTRY_POSTGRES_HOST: postgres SENTRY_EMAIL_HOST: smtp SENTRY_SECRET_KEY: SENTRY_SECRET_KEY_XXX stdin_open: true volumes: - /data/sentry-data:/var/lib/sentry/files - /data/sentry-data/config.yml:/etc/sentry/config.yml tty: true ports: - 9000:9000/tcp worker: image: sentry:9 environment: SENTRY_MEMCACHED_HOST: memcached SENTRY_REDIS_HOST: redis SENTRY_POSTGRES_HOST: postgres SENTRY_EMAIL_HOST: smtp SENTRY_SECRET_KEY: SENTRY_SECRET_KEY_XXX stdin_open: true volumes: - /data/sentry-data:/var/lib/sentry/files - /data/sentry-data/config.yml:/etc/sentry/config.yml tty: true command: - run - worker redis: image: redis:3.2-alpine postgres: restart: unless-stopped image: postgres:9.5 volumes: - /data/postgresql/data:/var/lib/postgresql/data ports: - 5432:5432/tcp
注意把 SENTRY_SECRET_KEY 换成 sentry 的实际 secret key
rancher-compose.yml
version: '2'services: cron: scale: 1 start_on_create: true memcached: scale: 1 start_on_create: true web: scale: 1 start_on_create: true health_check: response_timeout: 2000 healthy_threshold: 2 port: 9000 unhealthy_threshold: 3 initializing_timeout: 60000 interval: 2000 strategy: recreate reinitializing_timeout: 60000 worker: scale: 1 start_on_create: true redis: scale: 1 start_on_create: true postgres: scale: 1 start_on_create: true health_check: response_timeout: 2000 healthy_threshold: 2 port: 5432 unhealthy_threshold: 3 initializing_timeout: 60000 interval: 2000 strategy: recreate reinitializing_timeout: 60000
先将 docker-compose.yml 保存到服务器上,用来初始化 db 和创建账号
docker-compose run --rm web upgradeWould you like to create a user account now? [Y/n]: yEmail: anjia0532@gmail.comPassword: Repeat for confirmation: Should this user be a superuser? [y/N]: y## 直到输出Migrated: - sentry - sentry.nodestore - sentry.search - social_auth - sentry.tagstore - sentry_plugins.hipchat_ac - sentry_plugins.jira_acCreating missing DSNsCorrecting Group.num_comments counter## 并退出
配置 Sentry
配置 vue
如开头所提及的,本文以 iview-admin 为例进行讲解
git clone https://gitee.com/anjia/iview-admin.gitcd iview-admin
sentry
注意,网上很多文档,以讹传讹的使用过时的工具,raven-js .从 5.x 后官方建议使用 @sentry/browser 和 @sentry/integrations
npm install --save @sentry/integrationsnpm install --save @sentry/browser
修改 iview-admin\src\main.js
// The Vue build version to load with the `import` command// (runtime-only or standalone) has been set in webpack.base.conf with an alias.import Vue from 'vue'import App from './App'import router from './router'import store from './store'import iView from 'iview'import i18n from '@/locale'import config from '@/config'import importDirective from '@/directive'import { directive as clickOutside } from 'v-click-outside-x'import installPlugin from '@/plugin'import './index.less'import '@/assets/icons/iconfont.css'import TreeTable from 'tree-table-vue'import VOrgTree from 'v-org-tree'import 'v-org-tree/dist/v-org-tree.css'import * as Sentry from '@sentry/browser';import * as Integrations from '@sentry/integrations';// 实际打包时应该不引入mock/* eslint-disable */if (process.env.NODE_ENV !== 'production') require('@/mock')
Vue.use(iView, { i18n: (key, value) => i18n.t(key, value)})Vue.use(TreeTable)Vue.use(VOrgTree)/** * @description 注册admin内置插件 */installPlugin(Vue)/** * @description 生产环境关掉提示 */Vue.config.productionTip = false/** * @description 全局注册应用配置 */Vue.prototype.$config = config/** * 注册指令 */importDirective(Vue)Vue.directive('clickOutside', clickOutside)
/* eslint-disable no-new */new Vue({ el: '#app', router, i18n, store, render: h => h(App)})
Sentry.init({ dsn: 'https://xxx@xxx.xxx.com/xxx', integrations: [ new Integrations.Vue({ Vue, attachProps: true, }), ],});
npm installnpm run dev
打开 http://localhost:8080/error_store/error_store_page
分别点击两个按钮,模拟出错
打开 sentry 发现已经有错误上报了,并且对错误进行聚合。
点开查看详细内容。
如果需要生成 source-map ,请参考官方文档:
https://docs.sentry.io/platforms/javascript/sourcemaps/
matomo
npm install --save vue-matomo
修改 iview-admin\src\main.js
// The Vue build version to load with the `import` command// (runtime-only or standalone) has been set in webpack.base.conf with an alias.import Vue from 'vue'import App from './App'import router from './router'import store from './store'import iView from 'iview'import i18n from '@/locale'import config from '@/config'import importDirective from '@/directive'import { directive as clickOutside } from 'v-click-outside-x'import installPlugin from '@/plugin'import './index.less'import '@/assets/icons/iconfont.css'import TreeTable from 'tree-table-vue'import VOrgTree from 'v-org-tree'import 'v-org-tree/dist/v-org-tree.css'import * as Sentry from '@sentry/browser'import * as Integrations from '@sentry/integrations'import VueMatomo from 'vue-matomo'
// 实际打包时应该不引入mock/* eslint-disable */if (process.env.NODE_ENV !== 'production') require('@/mock')
Vue.use(iView, { i18n: (key, value) => i18n.t(key, value)})Vue.use(TreeTable)Vue.use(VOrgTree)/** * @description 注册admin内置插件 */installPlugin(Vue)/** * @description 生产环境关掉提示 */Vue.config.productionTip = false/** * @description 全局注册应用配置 */Vue.prototype.$config = config/** * 注册指令 */importDirective(Vue)Vue.directive('clickOutside', clickOutside)
/* eslint-disable no-new */new Vue({ el: '#app', router, i18n, store, render: h => h(App)})
Sentry.init({ dsn: 'https://xxx@xxx.xxx.com/xxx', integrations: [ new Integrations.Vue({ Vue, attachProps: true, }), ],});Vue.use(VueMatomo, { // Configure your matomo server and site by providing host: '//xxxx.xxxx.com/', siteId: xx,
// Changes the default .js and .php endpoint's filename // Default: 'piwik' trackerFileName: 'matomo.js',
// Overrides the autogenerated tracker endpoint entirely // Default: undefined trackerUrl: '//xxxx.xxxx.com/matomo.php',
// Enables automatically registering pageviews on the router router: router,
// Enables link tracking on regular links. Note that this won't // work for routing links (ie. internal Vue router links) // Default: true enableLinkTracking: true,
// Require consent before sending tracking information to matomo // Default: false requireConsent: false,
// Whether to track the initial page view // Default: true trackInitialView: true,
// Whether or not to log debug information // Default: false debug: false});
// orwindow._paq.push
// or throughwindow.Piwik.getTracker
打开 http://localhost:8080,随便访问几个菜单,然后打开 matomo
此时,路由已经有数据了
并且将用户的常规数据聚合起来。
更多
本文只对 sentry 和 matomo 进行了简单介绍。而这两者还有更深入的使用,比如 sentry 可用于推送邮件、文中一带而过的 sourcemap、单点登录(集成内部的权限认证)、自定义上报内容(将错误与用户 id 关联起来)以及敏感数据脱敏等;matomo 可用于每日发送分析报表、增加 kafka 插件、进行更深层次的挖掘、自定义上报内容(购物车等)、大数据量情况下的优化、优化用户设备指纹以及使用了 nginx 等反代软件后如何正确识别真实 ip、热力图、A/B test 以及漏斗图等。
作者介绍
赵安家,山东顺能网络全栈研发工程师。前端后端通吃,DevOps、安全、培训都有涉猎,负责了公司从单体服务迁移至微服务的项目。
更多内容推荐
爱奇艺智能前端异常监控平台的设计与实践
前端监控一般包括三方面:异常监控、性能监控(First Meaningful Paint、First Contentful Paint等性能指标监控)及行为数据监控(PV、UV、页面停留时长等监控)。
新一代云网采控之采集架构篇
5G时代是云和网相互融合的时代,涵盖云、网、端的“云网产品融合,云网一体化运营体系”。采集平台定位于中国电信新一代云网运营系统(OSS3.0)和中国移动5+2+N网管中台(OSS4.0)的技术底座,提供全网全专业的采集控制服务。
2021-04-28
数据采集之 js 自定义采集
首先,用户的行为会触发浏览器对被统计页面的一个http请求,比如打开某网页。当网页被打开,页面中的埋点javascript代码会被执行。
2021-05-12
实战 3:构建基于 Kubernetes 的系统可观测性
这节课,我们来看看如何构建基于 Kubernetes 的系统和应用的可观测性。
2022-10-10
7. Hive 与 HBase 的整合实现
2023-09-08
到底什么是 RUM?生产环境如何选择靠谱的前端 RUM 监控系统
RUM 英文全称是 Real User Monitoring,它作用是捕获和分析用户与网站的所有交互细节,旨在提高网站的可用性、提升用户体验。提升网站体验的方式非常多,可以优化数据库、优化接口调用,那为什么要 RUM 呢?
声网 agora 的 web 技术体验
作为公司的一名高级前端开发者,需要时刻根据公司的业务需求进行技术选型和设计开发,我司主要业务是为医疗信息化服务。
有赞前端质量保障体系
本文来自《2019年有赞技术大礼包》系列。
彩虹女神跃长空,Go 语言进阶之 Go 语言高性能 Web 框架 Iris 项目实战 - 项目入口与路由 EP01
书接上回,我们已经安装好Iris框架,并且构建好了Iris项目,同时配置了fresh自动监控项目的实时编译,万事俱备,只欠东风,彩虹女神蓄势待发。现在我们来看看Iris的基础功能,如何编写项目入口文件以及配置路由系统。
2022-08-16
基于 Prometheus 构建黑盒监控体系(已用于线上环境)
本文介绍基于Prometheus构建黑盒监控体系。
windows7 本地搭建 ELK 收集项目运行日志
=====
2021-11-11
鹅厂分布式大气监测系统:以 Serverless 为核心的云端能力如何打造?
以 Serverless 为核心的云架构大气监测项目,放出源码啦!
11|链路追踪:如何定制一个分布式链路跟踪系统 ?
这节课,一起看看如何实现一个简单的定制化分布式链路跟踪。
2022-11-16
dba+ 开源工具:面向开发的 MongoDB 图形可视化监控
本文介绍MongoDB图形可视化监控dba+开源工具。
在生产环境,如何选择靠谱的 APM 工具
给架构师的 APM 综合选型分析
3. 基于 Webhook 的认证服务集成
2023-09-26
04|如何快速搭建 Prometheus 系统?
这一讲我们来自己动手搭建Prometheus
2023-01-16
如何从 0 到 1 搭建性能检测系统
不同的团队有着各自不同的业务,业务之间千差万别,性能指标也不能一概而论,所以用一套统一的检测模型覆盖所有场景是不现实的。本文将介绍如何定制一个属于自己团队的性能检测平台。
17. Prometheus 详解
2023-09-26
监控全覆盖,接入只需 5 分钟:爱奇艺内容中台基于 CAT 的服务监控实践
系统监控一直是项目完整性的一个要素,“不让没有监控的系统上线”,这条准则也逐渐得到越来越多的人的认可。
推荐阅读
实战|网站监控如何做好监测点管理与内网数据采集
2023-03-17
1、案例:Atlas 搭建读写分离
2023-09-27
9.Jenkins 实战 1- 集成 Ansible(下)
2023-09-30
【工具安装】logstash 的安装
2022-12-10
轻量级分布式日志追踪 -Tlog 快速入门
2023-06-06
JS 常见错误和解决方法集锦
2023-02-15
12. 架构治理分析—熔断降级监控
2023-09-30
电子书

大厂实战PPT下载
换一换 
杨少华 | 贝联珠贯 大数据技术负责人
张忻正 | 哔哩哔哩 技术专家
陈硕 | 火山引擎 Data Agent技术专家






评论