ELK 企业日志分析系统简介
前言
随着企业级应用系统日益复杂,随之产生的海量日志数据。传统的日志管理和分析手段,难以做到高效检索、实时监控以及深度挖掘潜在价值。在此背景下,ELK日志分析系统应运而生。本文将从ELK 日志分析系统的原理、架构及其在实践中的应用做相关介绍。
目录
一、ELK 简介
1. 概述
2. 组件
2.1 ElasticSearch
2.2 Logstash
2.3 Kiabana
3. ELK架构
4. 完整日志系统基本特征
5. ELK 的工作原理
二、ELK 部署
1. 环境准备
2. ELK Elasticsearch 集群部署
3. 安装 Elasticsearch-head 插件
4. ELK Logstash 部署
5. 收集系统日志 /var/log/messages
6. ELK Kiabana 部署
一、ELK 简介
1. 概述
ELK 和 ElasticStack 实质上指的是同一个概念,ELK 平台是一套完整的日志集中处理方案。其拥有三个组件:ElasticSearch、Logstash 和 Kiabana 配合使用组成一个功能全面的数据平台。另外,当需要处理大量实时数据的场景,ELK 与 Kafka 的集成可以提供一个强大的实时数据收集、存储、分析和可视化解决方案。
2. 组件
2.1 ElasticSearch
提供了一个分布式多用户能力的全文搜索和分析引擎,可以把日志集中化管理。Elasticsearch 是用 Java 开发的,可通过 RESTful Web 接口,让用户可以通过浏览器与 Elasticsearch 通信。
下面是标准的 HTTP 方法与 RESTful 资源管理之间的映射关系:
- GET:获取文档
- POST:创建
- PUT:更新
- DELTET:删除
- GET:搜索值
核心概念:
- 接近实时:一旦索引操作完成(通常在几秒钟内),文档就能几乎立刻被搜索到
- 集群:是由一个或多个节点组成的
- 节点:一个独立运行实例,它可以存储数据、参与文档索引和搜索过程
- 索引:索引(库)——>类型(表)——>文档(记录),可以理解为一种数据库的特性,是一个大的文档的集合
- 分片:允许将索引切分成多个分片,可以在集群的不同节点上独立分布和操作
- 副本:允许为索引的每个分片创建副本,可以分摊读请求、有冗余能力
2.2 Logstash
由 Ruby 语言编写,运行在 Java 虚拟机(JVM)上,是一款强大的数据处理工具。其主要功能是收集日志,输入采集的数据进行加工(如过滤、改写等)以及数据的输出。相关概念有:input(数据采集)、filter(数据过滤)和 output(数据输出)。
主要主件有:
- Shipper:日志收集者,监控微服务日志
- Indexer:日志存储者
- Broker:连接多个收集者,指向 Indexer
- Search and Storage:搜索和存储
- Web Interface:展示可视化数据界面
由于 Logstash 运行在 jvm 虚拟机环境中,比较占用 cpu、内存资源,可以添加其它组件直接在操作系统运行:
- Filebeat:轻量级的开源日志文件数据搜集器,可以直接部署在目标主机上,实时读取日志文件并将数据发送到Elasticsearch、Logstash或其他输出目的地。
- Fluentd:是一个流行的开源数据收集器,可以收集来自各种数据源的日志数据,并将其规范化后输出到多种存储或分析系统中,如Elasticsearch、MongoDB、S3等。
- 缓存/消息队列(redis、kafka、RabbitMQ等):可以对高并发日志数据进行流量削峰和缓冲,这样的缓冲可以一定程度的保护数据不丢失,还可以对整个架构进行应用解耦。
2.3 Kiabana
针对 Elasticsearch 的开源分析及可视化平台,搜索查看索引中的数据。Kibana 通常与 Elasticsearch 一起部署,对接 Es 接口。
3. ELK架构
① 日志数据首先由应用程序产生。这些日志可能是应用程序运行时生成的标准输出、错误输出,或者是通过API直接输出的日志事件。例如,Web服务器、数据库服务、微服务等各类应用都会产生日志信息
② Kafka、Redis 可以起到缓冲的作用,暂时存储本地的日志数据直到成功发送出去,避免数据丢失;同时具有抗高并发能力,存储速度快等特点
③ Logstash 接收到来自缓冲区的日志数据后,进入数据解析区。在这里,Logstash通过配置的输入插件(Input Plugins)读取数据,然后经过过滤插件(Filter Plugins)进行解析和转换,最后输出数据(Output)
④ 经过解析和处理后的日志数据,最终被发送到Elasticsearch中存储。Elasticsearch 是一个分布式搜索引擎和分析引擎,它将数据按照索引(index)组织,并将索引进一步划分为多个分片(shards)以实现水平扩展和高可用性
⑤ Kibana 是一个强大的可视化工具,它连接到 Elasticsearch,可以从存储在 Elasticsearch 中的日志数据构建实时仪表板和报表。开发人员和运维团队可以通过 Kibana 的搜索和可视化功能
4. 完整日志系统基本特征
- 收集:能够采集多种来源的日志数据
- 传输:能够稳定的把日志数据解析过滤并传输到存储系统
- 存储:存储日志数据
- 分析:支持 UI 分析
- 警告:能够提供错误报告,监控机制
5. ELK 的工作原理
① 在所有需要收集日志的服务器上部署Logstash;或者先将日志进行集中化管理在日志服务器上,在日志服务器上部署 Logstash
② Logstash 收集日志,将日志格式化并输出到 Elasticsearch 群集中
③ Elasticsearch 对格式化后的数据进行索引和存储
④ Kibana 从 ES 群集中查询数据生成图表,并进行前端数据的展示
总结:logstash 作为日志搜集器,从数据源采集数据,并对数据进行过滤,格式化处理,然后交由Elasticsearch 存储,kibana 对日志进行可视化处理。
二、ELK 部署
1. 环境准备
节点名 | ip地址 | 安装软件 |
node1 | 192.168.190.100 | elasticsearch、kibana |
node2 | 192.168.190.101 | elasticsearch |
logstash | 192.168.190.102 | apache、logstash |
systemctl stop firewalld.service
setenforce 0
# 关闭防火墙、核心防护功能
node1节点:hostnamectl set-hostname node1
node2节点:hostnamectl set-hostname node2
logstash节点:hostnamectl set-hostname logstash
# 修改主机名,方便查看
echo 192.168.190.100 node1 >> /etc/hosts
echo 192.168.190.101 node2 >> /etc/hosts
echo 192.168.190.102 logstash >> /etc/hosts
# 编辑域名解析,制作映射
[root@node1 ~]# java -version
openjdk version "1.8.0_131"
[root@node2 ~]# java -version
openjdk version "1.8.0_131"
# 显示 Java 运行时环境版本信息,如果没有:yum -y install java
2. ELK Elasticsearch 集群部署
实际生产环境中常常会部署更多的节点来增强冗余能力、高可用性、负载均衡、数据扩容等,这里部署两台(在Node1、Node2节点上操作)。
① 安装 elasticsearch rpm 包
分别在node1、node2节点上操作:
[root@node1 opt]# ls
elasticsearch-5.5.0.rpm # 这里使用 elasticsearch-5.5.0.rpm 包
[root@node1 opt]# rpm -ivh elasticsearch-5.5.0.rpm
[root@node1 opt]# systemctl daemon-reload
[root@node1 opt]# systemctl enable elasticsearch.service
# 加载系统服务
② 修改 elasticsearch 主配置文件
[root@node1 ~]# rpm -qc elasticsearch
/etc/elasticsearch/elasticsearch.yml
[root@node1 ~]# cp /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bak
# 备份配置文件
[root@node1 ~]# vim /etc/elasticsearch/elasticsearch.yml
17 cluster.name: my-application # 取消注释,指定集群名字,名字可以按需修改
23 node.name: node1 # 取消注释,指定节点名字:node1、Node2
33 path.data: /data/elk_data # 取消注释,指定数据存放路径
37 path.logs: /var/log/elasticsearch/ # 取消注释,指定日志存放路径
43 bootstrap.memory_lock: false # 取消注释,改为在启动的时候不锁定内存
55 network.host: 0.0.0.0 # 取消注释,设置监听地址,0.0.0.0代表所有地址
59 http.port: 9200 # 取消注释,ES 服务的默认监听端口为9200
68 discovery.zen.ping.unicast.hosts: ["node1", "node2"] # 取消注释,集群发现通过单播实现,指定要发现的节点 node1、node2
[root@node1 ~]# grep -v "^#" /etc/elasticsearch/elasticsearch.yml # 显示去除了注释的配置内容
③ 创建数据存放路径并授权
[root@node1 ~]# mkdir -p /data/elk_data
[root@node1 ~]# chown elasticsearch:elasticsearch /data/elk_data/
④ 启动 elasticsearch 是否成功开启
[root@node1 ~]# systemctl start elasticsearch.service
[root@node1 ~]# netstat -antp | grep 9200 # 启动的有点慢需要等一会
tcp6 0 0 :::9200 :::* LISTEN 2541/java
⑤ 查看节点信息
浏览器访问 http://192.168.190.100:9200 、 http://192.168.190.101:9200 查看节点 Node1、Node2 的信息:
浏览器访问查看群集的健康情况
status 值:
- green(绿色):表示节点健康运行
- 绿色:健康 数据和副本 全都没有问题
- 红色:数据都不完整
- 黄色:数据完整,但副本有问题
浏览器访问 http://192.168.190.100:9200/_cluster/state?pretty 可以检查群集状态信息。使用上述方式查看群集的状态对用户并不友好,可以通过安装 Elasticsearch-head 插件,可以更方便地管理群集。
3. 安装 Elasticsearch-head 插件
安装 Elasticsearch-head 插件的主要作用是为 Elasticsearch 提供一个可视化的 Web 界面,方便用户管理和监控 Elasticsearch 集群。
Elasticsearch 在 5.0 版本后,Elasticsearch-head 插件需要作为独立服务进行安装,需要使用npm工具(NodeJS的包管理工具)安装。安装 Elasticsearch-head 需要提前安装好依赖软件 node 和 phantomjs。
- node:是一个基于 Chrome V8 引擎的 JavaScript 运行环境
- phantomjs:是一个基于 webkit 的JavaScriptAPI,可以理解为一个隐形的浏览器,任何基于 webkit 浏览器做的事情,它都可以做到
① 编译安装 node
[root@node1 opt]# yum install gcc gcc-c++ make -y # 安装编译工具
[root@node1 opt]# ls
elasticsearch-5.5.0.rpm node-v8.2.1.tar.gz # 准备软件包 node-v8.2.1.tar.gz
[root@node1 opt]# tar zxvf node-v8.2.1.tar.gz
[root@node1 opt]# cd node-v8.2.1/
[root@node1 node-v8.2.1]# ./configure
[root@node1 node-v8.2.1]# make && make install
② 安装 phantomjs(前端的框架)
[root@node1 opt]# ls
phantomjs-2.1.1-linux-x86_64.tar.bz2 # 准备软件包
[root@node1 opt]# tar jxvf phantomjs-2.1.1-linux-x86_64.tar.bz2 -C /usr/local/src/
[root@node1 opt]# cd /usr/local/src/phantomjs-2.1.1-linux-x86_64/bin
[root@node1 bin]# cp phantomjs /usr/local/bin
③ 安装 Elasticsearch-head 数据可视化工具
[root@node1 opt]# tar zxvf elasticsearch-head.tar.gz -C /usr/local/src/
[root@node1 opt]# cd /usr/local/src/elasticsearch-head/
[root@node1 elasticsearch-head]# npm install
④ 修改 Elasticsearch 主配置文件
[root@node1 ~]# vim /etc/elasticsearch/elasticsearch.yml
http.cors.enabled: true # 开启跨域访问支持,默认为 false
http.cors.allow-origin: "*" # 指定跨域访问允许的域名地址为所有
[root@node1 ~]# systemctl restart elasticsearch
⑤ 启动 Elasticsearch-head 服务
必须在解压后的 elasticsearch-head 目录下启动服务,进程会读取该目录下的 gruntfile.js 文件,否则可能启动失败。
[root@node1 ~]# cd /usr/local/src/elasticsearch-head/
[root@node1 elasticsearch-head]# npm run start &
[1] 85478
[root@node1 elasticsearch-head]#
> elasticsearch-head@0.0.0 start /usr/local/src/elasticsearch-head
> grunt server
Running "connect:server" (connect) task
Waiting forever...
Started connect web server on http://localhost:9100
⑥ 通过 Elasticsearch-head 查看 Elasticsearch 信息
通过浏览器访问 http://192.168.190.100:9100/ 地址并连接群集。如果看到群集健康值为 green 绿色,代表群集很健康。
[root@node1 ~]# lsof -i:9100 # 列出所有打开指定TCP或UDP端口(这里是9100)的进程信息
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
grunt 85488 root 12u IPv4 98596 0t0 TCP *:jetdirect (LISTEN)
⑦ 插入索引
[root@node1 ~]# curl -X PUT 'localhost:9200/index-demo1/test/1?pretty&pretty' -H 'content-Type: application/json' -d '{"user":"zhangsan","mesg":"hello world"}'
{
"_index" : "index-demo1",
"_type" : "test",
"_id" : "1",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 2,
"failed" : 0
},
"created" : true
}
浏览器访问 http://192.168.190.100:9100/ 查看索引信息,可以看见索引默认被分片5个,并且有一个副本。点击“数据浏览”,会发现在node1上创建的索引为 index-demo,类型为 test 的相关信息。
4. ELK Logstash 部署
Logstash 一般部署在需要监控其日志的服务器。
① 安装Apahce服务(httpd)
[root@logstash ~]# yum -y install httpd
[root@logstash ~]# systemctl start httpd.service
② 检查安装 Java 环境
[root@logstash ~]# java -version
openjdk version "1.8.0_131"
# 显示 Java 运行时环境版本信息,如果没有:yum -y install java
③ 安装 logstash
[root@logstash opt]# ls
logstash-5.5.1.rpm # 准备 logstash-5.5.1.rpm 包
[root@logstash opt]# rpm -ivh logstash-5.5.1.rpm
[root@logstash opt]# systemctl start --now enable logstash.service
[root@logstash opt]# ln -s /usr/share/logstash/bin/logstash /usr/local/bin/
④ 测试 Logstash
Logstash 命令常用选项:
-f:通过这个选项可以指定 Logstash 的配置文件,根据配置文件配置 Logstash 的输入和输出流。
-e:从命令行中获取,输入、输出后面跟着字符串,该字符串可以被当作 Logstash 的配置(如果是空,则默认使用 stdin 作为输入,stdout 作为输出)。
-t:测试配置文件是否正确,然后退出。
定义输入和输出流:输入采用标准输入,输出采用标准输出(类似管道)
[root@logstash ~]# logstash -e 'input { stdin{} } output { stdout{} }'
www.baidu.com # 键入内容(标准输入)
2024-04-10T13:43:30.574Z logstash www.baidu.com # 输出结果(标准输出)
www.sina.com.cn
2024-04-10T13:44:18.445Z logstash www.sina.com.cn
使用 rubydebug 输出详细格式显示,codec 为一种编解码器:
[root@logstash ~]# logstash -e 'input { stdin{} } output { stdout{ codec=>rubydebug } }'
www.baidu.com # 键入内容(标准输入)
{
"@timestamp" => 2024-04-10T13:48:25.820Z, # 输出结果(处理后的结果)
"@version" => "1",
"host" => "logstash",
"message" => "www.baidu.com"
}
使用 Logstash 将信息写入 Elasticsearch 中:
[root@logstash ~]# logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["192.168.190.100:9200"] } }'
www.baidu.com # 键入内容(标准输入)
结果不在标准输出显示,而是发送至 Elasticsearch 中,可浏览器访问 http://192.168.190.100:9100/ 查看索引信息和数据浏览:
5. 收集系统日志 /var/log/messages
① 定义 logstash 配置文件
Logstash 配置文件基本由三部分组成:input、output 以及 filter(可选,根据需要选择使用)。
input:表示从数据源采集数据,常见的数据源如Kafka、日志文件等
filter:表示数据处理层,包括对数据进行格式化处理、数据类型转换、数据过滤等,支持正则表达式
output:表示将Logstash收集的数据经由过滤器处理之后输出到Elasticsearch。
格式如下:
input {...}
filter {...}
output {...}
在每个部分中,也可以指定多个访问方式。例如,若要指定两个日志来源文件,则格式如下:
input {
file { path =>"/var/log/messages" type =>"syslog"}
file { path =>"/var/log/httpd/access.log" type =>"apache"}
② 修改 Logstash 配置文件,让其收集系统日志/var/log/messages,并将其输出到 elasticsearch 中
[root@logstash ~]# vim /etc/logstash/conf.d/system.conf
vim /etc/logstash/conf.d/system.conf
input {
file{
path =>"/var/log/messages" # 指定要收集的日志的位置
type =>"system" # 自定义日志类型标识
start_position =>"beginning" # 表示从开始处收集
}
}
output {
elasticsearch { # 输出到 elasticsearch
hosts => ["192.168.190.100:9200"] # 指定 elasticsearch 服务器的地址和端口
index =>"system-%{+YYYY.MM.dd}" # 指定输出到 elasticsearch 的索引格式
}
}
[root@logstash ~]# chmod +r /var/log/messages
[root@logstash ~]# systemctl restart logstash
浏览器访问 http://192.168.190.100:9100/ 查看索引信息:
6. ELK Kiabana 部署
用于可视化和管理Elasticsearch中数据的开源分析和可视化平台。Kibana提供了丰富的图表、仪表盘和数据可视化工具,使用户能够以直观的方式探索和分析数据。(在 Node1 节点上操作)
① 安装 Kiabana
[root@node1 opt]# ls
kibana-5.5.1-x86_64.rpm # 安装包
[root@node1 opt]# rpm -ivh kibana-5.5.1-x86_64.rpm
② 设置 Kibana 的主配置文件
[root@node1 opt]# vim /etc/kibana/kibana.yml
2 server.port: 5601 # 取消注释,Kiabana 服务的默认监听端口为5601
7 server.host: "0.0.0.0" # 取消注释,设置 Kiabana 的监听地址,0.0.0.0代表所有地址
21 elasticsearch.url: "http://192.168.190.100:9200" # 取消注释,设置和 Elasticsearch 建立连接的地址和端口
30 kibana.index: ".kibana" # 取消注释,设置在 elasticsearch 中添加.kibana索引
③ 启动 Kibana 服务
[root@node1 opt]# systemctl start --now enable kibana.service
[root@node1 opt]# netstat -natp | grep 5601
tcp 0 0 0.0.0.0:5601 0.0.0.0:* LISTEN 2808/node
④ 验证 Kibana
浏览器访问 http://192.168.190.100:5601:
第一次登录需要添加一个 Elasticsearch 索引:
Index name or pattern
//输入:system-* #在索引名中输入之前配置的 Output 前缀“system”
单击 “create” 按钮创建,单击 “Discover” 按钮可查看图表信息及日志信息。
数据展示可以分类显示,在“Available Fields”中的“host”,然后单击 “add”按钮,可以看到按照“host”筛选后的结果
⑤ 将 Apache 服务器的日志(访问的、错误的)添加到 Elasticsearch 并通过 Kibana 显示
[root@logstash ~]# vim /etc/logstash/conf.d/apache_log.conf
input {
file{
path => "/etc/httpd/logs/access_log"
type => "access"
start_position => "beginning"
}
file{
path => "/etc/httpd/logs/error_log"
type => "error"
start_position => "beginning"
}
}
output {
if [type] == "access" {
elasticsearch {
hosts => ["192.168.190.100:9200"]
index => "apache_access-%{+YYYY.MM.dd}"
}
}
if [type] == "error" {
elasticsearch {
hosts => ["192.168.190.100:9200"]
index => "apache_error-%{+YYYY.MM.dd}"
}
}
}
[root@logstash ~]# cd /etc/logstash/conf.d/
[root@logstash conf.d]# /usr/share/logstash/bin/logstash -f apache_log.conf
浏览器访问 http://192.168.190.100:9100 查看索引是否创建:
浏览器访问 http://192.168.190.100:5601 登录 Kibana,单击“Create Index Pattern”按钮添加索引, 在索引名中输入之前配置的 Output 前缀 apache_access-*,并单击“Create”按钮。在用相同的方法添加 apache_error-*索引。
选择“Discover”选项卡,在中间下拉列表中选择刚添加的 apache_access-* 、apache_error-* 索引, 可以查看相应的图表及日志信息。
上一篇: 甘特图在生产计划管理中的应用
下一篇: 芋+云开发--微信小程序实践
推荐阅读
-
构建 ELF+Filebeaat+Zookeeper+Kafka 的 ELFK 日志分析系统
-
ELK 企业日志分析系统 - I. ELK 日志分析系统
-
ELK 企业日志分析系统简介
-
纯干货分享 | 研发效能提升——敏捷需求篇-而敏捷需求是提升效能的方式中不可或缺的模块之一。 云智慧的敏捷教练——Iris Xu近期在公司做了一场分享,主题为「敏捷需求挖掘和组织方法,交付更高业务价值的产品」。Iris具有丰富的团队敏捷转型实施经验,完成了企业多个团队从传统模式到敏捷转型的落地和实施,积淀了很多的经验。 这次分享主要包含以下2个部分: 第一部分是用户影响地图 第二部分是事件驱动的业务分析Event driven business analysis(以下简称EDBA) 用户影响地图,是一种从业务目标到产品需求映射的需求挖掘和组织的方法。 在软件开发过程中可能会遇到一些问题,比如大家使用不同的业务语言、技术语言,造成角色间的沟通阻碍,还会导致一些问题,比如需求误解、需求传递错误等;这会直接导致产品的功能需求和要实现的业务目标不是映射关系。 但在交付期间,研发人员必须要将这些需求实现交付,他们实则并不清楚这些功能需求产生的原因是什么、要解决客户的哪些痛点。研发人员往往只是拿到了解决方案,需要把它实现,但没有和业务侧一起去思考解决方案是否正确,能否真正的帮助客户解决问题。而用户影响地图通常是能够连接业务目标和产品功能的一种手段。 我们在每次迭代里加入的假设,也就是功能需求。首先把它先实现,再逐步去验证我们每一个小目标是否已经实现,再看下一个目标要是什么。那影响地图就是在这个过程中帮我们不断地去梳理目标和功能之间的关系。 我们在软件开发中可能存在的一些问题 针对这些问题,我们如何避免?先简单介绍做敏捷转型的常规思路: 先做团队级的敏捷,首先把产品、开发、测试人员,还有一些更后端的人员比如交互运维的同学放在一起,组成一个特训团队做交付。这个团队要包含交付过程中所涉及的所有角色。 接着业务敏捷要打通整个业务环节和研发侧的一个交付。上图中可以看到在敏捷中需求是分层管理的,第一层是业务需求,在这个层级是以用户目标和业务目标作为输入进行规划,同时需要去考虑客户的诉求。业务人员通过获取到的业务需求,进一步的和团队一起将其分解为产品需求。所以业务需求其实是我们真正去发布和运营的单元,它可以被独立发布到我们的生产环境上。我们的产品需求其实就是产品的具体功能,它是我们集成和测试的对象,也就是我们最终去部署到系统上的一个基本单元。产品需求再到了我们的开发团队,映射到迭代计划会上要把它分解为相应的技术任务,包括我们平时所说的比如一些前端的开发、后端的开发、测试都是相应的技术任务。所以业务敏捷要达到的目标是需要去持续顺畅高质量的交付业务价值。 将这几个点串起来,形成金字塔结构。最上层我们会把业务目标放在整个金字塔的塔尖。这个业务目标是通过用户的目标以及北极星指标确立的。确认业务目标后再去梳理相应的业务流程,最后生产。另外产品需求包含了操作流程和业务规则,具需求交付时间、工程时间以及我们的一些质量标准的要求。 谈到用户影响的地图,在敏捷江湖上其实有一个传说,大家都有一个说法叫做敏捷需求的“任督二脉”。用户影响地图其实就是任脉,在黑客马拉松上用过的用户故事地图其实叫督脉。所以说用户影响地图是在用户故事地图之前,先帮我们去梳理出我们要做哪些东西。当我们真正识别出我们要实现的业务活动之后,用户故事地图才去梳理我们整个的业务工作流,以及每个工作流节点下所要包含的具体功能和用户故事。所以说用户影响地图需要解决的问题,我们包括以下这些: 首先是范围蔓延,我们在整张地图上,功能和对应的业务目标是要去有一个映射的。这就避免了一些在我们比如有很多干系人参与的会议上,那大家都有不同想法些立场,会提出很多需求(正确以及错误的需求)。这个时候我们会依据目标去看这些需求是否真的是会影响我们的目标。 这里提到的错误需求,比如是利益相关的人提出的、客户认为产品应该有的、某个产品经理需求分析师认为可以有的....但是这些功能在用户影响地图中匹配不到对应目标的话,就需要降低优先级或弃掉。另外,通常我们去制定解决方案的时候,会考虑较完美的实现,导致解决方案括很多的功能。这个时候关键目标至关重要,会帮助我们梳理筛选、确定优先级。 看一下用户影响到地图概貌 总共分为一个三层的结构: 第一层why,你的业务目标哪个是最重要的,为什么?涉及到的角色有哪些? 第二层how ,怎样产生影响?影响用户角色什么样的行为? (不需要去列出所有的影响,基于业务目标) 第三层what,最关键的是在梳理需求时不需一次把所有细节想全,这通常团队中经常遇到的问题。 我们用这个例子来看一下 这是一个客服中心的影响地图,业务目标是 3个月内不增加客服人数的前提下能支持1.5倍的用户数。此业务目标设定是符合 smart 原则的,specific非常的具体,miserable 是可以衡量的,action reoriented是面向活动的, real list 也是很实际的。 量化的目标会指引我们接下来的行动,梳理一个业务目标,尽量去量化,比如 :我们通过打造一条什么样的流水线,能够提高整个部署的效率,时间是原来的 1/2 。这样才是一个能量化的有意义的目标。 回到这幅图, how 层级识别出来的内容,客服角色:想要对它施加的影响,把客户引导到论坛上,帮助客户更容易的跟踪问题,更快速的去定位问题。初级用户:方论坛上找到问题。高级用户:在论坛上回答问题。通过我们这些用户角色,进行活动,完成在不增加客户客服人数的前提下支持更多的用户数量。 最后一个层级,才是我们日常接触比较多的真正的功能的特性和需求,比如引导到客户到论坛上,其实这个产品就需要有一个常见问题的论坛的链接。这个层次需要我们团队进一步地在交付,在每个迭代之前做进一步的梳理,细化成相应的用户故事。 这个是云智慧团队中,自己做的影响地图的范例,可以看下整个的层级结构。序号表示优先级。 那我们用户影响地图可以总结为:
-
企业培训创新:在线教育系统源代码综合分析
-
深入比较 Splunk 和 ELK 这两种日志处理生态系统
-
弹性堆栈-入门知识]ELK 简介,构建最新的 ELK 日志分析系统-Elasticsearch
-
小红书大产品部架构 小红书产品概览--经过性能、稳定性、成本等多个维度的详细评估,小红书最终决定选择基于腾讯云星海自研硬件的SA2云服务器作为主力机型使用。结合其秒级的快速扩缩、超强兼容和平滑迁移能力,小红书在抵御上亿次用户访问、保证系统稳定运行的同时,也实现了成本的大幅降低。 星海SA2云服务器是基于腾讯云星海的首款自研服务器。腾讯云星海作为自研硬件品牌,通过创新的高兼容性架构、简洁可靠的自主设计,结合腾讯自身业务以及百万客户上云需求的特点,致力于为云计算时代提供安全、稳定、性能领先的基础架构产品和服务。如今,星海SA2云服务器也正在为越来越多的企业提供低成本、高效率、更安全的弹性计算服务。 以下是与小红书SRE总监陈敖翔的对话实录。 问:请您介绍一下小红书及其主要商业模式? 小红书是一个面向年轻人的生活方式平台,在这里,他们发现了向上、多元的真实世界。小红书日活超过 3500 万,月活跃用户超过 1 亿,日均笔记曝光量达 80 亿。小红书由社交平台和在线购物两大部分组成。与其他线上平台相比,小红书的内容基于真实的口碑分享,播种不止于线上,还为线下实体店赋能。 问:围绕业务发展,小红书的系统架构经历了怎样的变革和演进? 系统架构变化不大,影响最深的是资源开销。过去三年,资源开销大幅增加,同比增长约 10 倍。在此背景下,我们努力进行优化,包括很早就开始使用 K8S 进行资源调度。到 18 年年中,绝大多数服务已经完全实现了容器化。 问:目前小红书系统架构中的计算基础设施建设和布局是怎样的? 我们目前的建设方式可以简单描述为星型结构。腾讯云在上海的一个区是我们的计算中心,承载着我们的核心数据和在线业务。在外围,我们还有两个数据中心进行计算分流,同时承担灾备和线上业务双活的角色。 与其他新兴电子商务互联网公司类似,小红书的大部分计算能力主要用于线下数据分析、模型训练和在线推荐等平台。随着业务的发展,对算力的需求也在加速增长。
-
构建高效学习型组织:企业培训系统架构综合分析
-
流式实时日志分析系统