vs2019数据可视化调试(vs 可视化)

什么是Visual Basic调试

Visual Basic常见问题集锦 by 杨冶军

||→相关文章Visual Basic常见问题集锦(下)

Q: Visual Basic 6.0 是什么?

A: Visual Basic 6.0 是用来创建高性能的企业应用程序及基于 Web的应用程序的最有效工具。Visual

Basic 6.0 使开发者得以创建驻留在客户或服务器上或运行在分布式n-层环境里的强壮应用程序。Vi-

sual Basic 6.0 这个快速应用开发(Rapid Application Development:RAD)工具既可以作为一个单独

的产品也可以作为 Visual Studio 6.0 套件的一个组成部分。

Q: 如何安装Visual Basic?

A: 安装的步骤如下:

1. 开始下载之前,先在您的计算机上建立一个下载目录。

2. 单击每条超级链接,便开始下载。将下载文件保存在您所创建的目录。

3. 将下载的文件解压到同一目录下。

4. 如果您已安装了MDAC 2.5,直接到第五步。否则,需运行MDAC_typ.exe文件来安装MDAC 2.5。

5. 运行SetupSP5.exe。

Q: Visual Basic 6.0 在Visual Studio 中扮演什么角色?

A: Visual Basic 6.0 是 Microsoft Visual Studio 开发工具套件中的一个成员,为 Visual Studio 开发人

员提供了用来创建应用程序和构件的生产效率最高的环境。 Microsoft Visual Studio 是一整套开发工

具,向各大企业提供了创建解决方案的简单易用的工具。Visual Studio 专业版使开发者得以完全享受到

Microsoft Windows 操作系统及 Web 领域的发展带来的好处。Microsoft Visual J++、 Microsoft Vi-

sual Basic 开发系统、Microsoft Visual C++ 开发系统、 Microsoft Visual InterDev Web 开发系统及

Visual FoxPro 数据库开发系统,各具特色,各擅胜场。Visual Studio 企业版是快速创建以数据为中心

的企业解决方案的完全套件。它包含诸如:可视化数据库工具(Visual Database Tools)、Microsoft

Visual SourceSafe 版本控制系统、Microsoft Repository(Microsoft 储藏室)、可视化构件管理器

(Visual Component Manager)、Microsoft Visual Modeler 和 Microsoft BackOffice 家族系列应用服

务器的开发版本等企业和工作组开发特性。

Q: 哪个版本的 Visual Basic 6.0 最适合我?

A: Visual Basic 6.0, 标准版不要求事先的编程经验。这个版本是为学生、业余爱好者和别的任何想更多地了

解基于 Windows 的应用程序是如何开发的人而设计的。

Visual Basic 6.0, 专业版是为需要创建客户/服务器应用程序或能访问 Internet的应用程序的个体专业人

员或公司开发人员设计的。 Visual Basic 6.0, 企业版是为欲创建分布式、高性能的客户/服务器应用程序

或 Internet 及 intranet 上的应用程序的开发组设计的。

Q: Visual Basic 6.0 中有些什么新内容?

A: 关键的新特性包括以下这些:

1. 集成的可视化数据库工具:

Visual Basic 6.0 提供一整套工具以在任何应用程序中集成数据库。数据库特性包括用来设计和修改 Micro-

soft SQL Server、 Oracle 7.3.3 或以上及 AS/400 的数据库的工具。

2. 数据环境设计器:

使用拖放功能来可视化地创建可重用的记录集命令对象。绑定到多个数据源上,以聚集和操作数据。

3. 用拖放方式创建绑有数据的表格和报告:

使用新的数据环境设计器,开发者可迅速拖放自定义的绑有数据的控件来创建表格;可用新的数据报表设计器

来创建报表。创建自定义数据层阶结构也非常容易,只需填写一个对话框,再将命令拖入表格中即可。

4. Visual Basic WebClass 设计器:

创建可在任何平台上用任何 Web 浏览器访问的服务器方应用或构件。

5. 动态 HTML 页面设计器:

开发用文档对象模型和动态 HTML 平面作用户界面的富于多媒体的应用。

新的性能方面的增强。使用新的字符串函数和诸如驻留内存(Retain in Memory)的技术来创建更快、可调节

性更好的应用程序和构件。

Q: Visual Basic 6.0 如何使我得以创建企业解决方案?

A: Visual Basic 6.0 是 Microsoft 的首要企业开发套件 Visual Studio 6.0企业版工具套件的一个成员。

Visual Studio 6.0 企业版为企业开发人员带来了若干新特性,包括:

1. 企业数据库支持,包括用来做 Oracle 和 SQL Server 数据库上的数据概图和存储过程设计的企业可视化

数据库工具(企业版 Visual Database Tools);SQL Server 6.5 的开发版及与 AS400 和 IBM 大中型机上

的 VSAM 和 DB/2 数据库相连接的 SNA Server 4.0 的开发版。

2. 增强的生存周期生产力,包括用来设计基于通用模型语言( Universal Modeling

Language:UML)的多层应用的 Microsoft Visual Modeler

2.0(可视化建模器);及给多层应用做性能描绘和分析的 Visual Studio Analyzer(分析器)。

3. 组开发支持,包括一个分布式的、基于工作组的 Web 开发系统,Visual SourceSafe 6.0 源码控制系统,

Microsoft Repository(储藏室)及用来组织和在工作组间共享可重用商务构件的工具,Visual Component

Manager 2.0(可视化构件管理器)。

4. 集成的应用服务,包含 Microsoft BackOffice 4.5 的开发版,带有包括数据库、事务、消息队列、消息

传递与合作、Web 应用、安全 及 SNA 连接在内的集成应用服务。

Q: Visual Basic 6.0 中有那些新增特性能提高用 Visual Basic 写成的应用程序的性能?

A: Microsoft 在 Visual Basic 中做了若干改良以提高性能。首次在 Visual Basic 5.0 中引入的自然代码

编译只是这些用来提高应用程序性能的重要特性之一。根据语言性能基准(benchmarks)Visual Basic 6.0

要比 Visual Basic 4.0快上足 20 倍。这些新特性包括"驻留内存"选项,这个选项将服务器分布式(server-

distributed)应用程序的(已载入的)构件结构高速缓存在内存里。

Q: WebClasses 是什么,应该何时使用?

A: Visual Basic 6.0 WebClasses 是基于 Web 服务器的 COM 构件,它赋予Visual Basic 编程人员以在Vi-

sual Basic 开发环境内书写代码来自定义 Web 服务器的 URL 响应的能力。由此生成的 Visual Basic 应用

程序是一个跨平台的基于服务器的应用,并可在任何平台上用任何HTML浏览器访问。

Visual Basic WebClasses 被设计用来帮助开发者完成以下任务:

1. 使用 Visual Basic 的事件驱动模型来创建基于 Web 的应用,以便将应用逻辑从用户界面隔离开来。

2. 创建现存 Visual Basic 应用程序的基于 Web 的前端。

3. 创建自定义的服务器方 COM 构件,以便在单一的环境里调试其应用程序。

Q: 为何我希望调用App.LogEvent方法将调试信息写入Windows NT的事件日志(Event Log)中,但我在调试时

始终看不到有任何内容被写入?

A: 这个功能仅对编译过的VB程序起作用,如果你在VB环境下执行,该语句会被忽略。为了在VB环境调试时也能

使用该功能,你可以用VB编写一个ActiveX DLL组件,此组件公开一个方法用于写事件日志,将其编译后供你的

VB程序调用。

Q: 什么是Visual Basic 6.0新添的模板特性?

A: 模板使您能够创建一个公用的表单(Form),它可被任何VB程序重用,便于提高开发效率和实现一致的程序界

面。

Q: VB能否编写Windows NT/2000的服务程序(Service)?

A: Service程序一般都要在后台长期的运行,因此安全、稳定、健壮是Service程序的基本要求,这也要求一种

更接近操作系统的语言来开发Service程序。Visual Basic 是一种高级编程语言,一般情况下我们需要使用

ActiveX 组件来实现程序功能,但是我们往往不能清楚的了解到这些组件的具体实现细节,因此VB并不适合于开

发Windows NT/2000的服务程序,而Visual C++则是一种较合适的语言。微软公司目前不推荐,也不支持用VB开

发服务程序。

Q: VB6.0是否支持继承,多态?

A: 继承分为实现继承(implementing inherit) 和接口继承(Interface inherit), VB6.0的类模块提供接口继

承的支持。使用implements 语句能实现接口继承。 VB6.0程序中能将子类赋于父类实现多态, 事实上它是通过

对父类接口的查询(QueryInterface)来实现多态。

Q: VB6.0创建的ActiveX DLL/EXE是否支持MTA?

A: VB6.0创建的ActiveX DLL的线程模式是STA或Thread-Oblivious, 任何MTA客户访问组件前必需创建一个新的

线程,由新线程进入STA创建对象,然后返回接口代理。ActiveX EXE 的Thread Pool 也不是MTA,每一个新对

象的创建都存在一个新的STA中,直到线程数量达到Pool的设定值。

Q: 我用VB开发了一个ActiveX EXE,其中包含了多个Class模块,但为何在DCOMCNFG..EXE中只看到一个Class?

A: DCOM提供了Server级的安全特性,所有在同一Server内的对象共享一个安全设置因此我们在DCOMCNFG..EXE

中只能看到每个ActiveX EXE的第一个对象(Class)。

Q: 我在Internet Explorer 执行VB所产生的ActiveX Document,却产生了下列的错误信息,Run-time error

'406': Non-modal forms cannot be displayed in this host application from an ActiveX DLL, ActiveX

Control or Property Page. 如何解决?

A: 这是ActiveX Document在 Internet Explorer执行的限制。您需使用 vbModal的属性来Open form。或是用

下列代码,来测试Container是否支持vbModeless:

If App.NonModalAllowed Then frmModeless.Show vbModeless Else frmModeless.Show vbModal End If

Q: 为什么用VB的Internet Transfer Control (ITC)编写的FTP客户端应用程式,在联接某些服务器上(如IBM

大型机等)的FTP服务时,工作不正常?

A: 标准的FTP协议提供了两种传输模式:基于二进制的(Binary)和基于ASCII。Microsoft的ITC控件只实现了

比较常用的传输模式:二进制传输模式(Binary)。而一些比较早的大型机上FTP服务往往是基于ASCII传输模

式,这就使得ITC与这些机器上的FTP服务不兼容。 解决方法:使用WinInet API来实现上述两种模式的传输过

程。

Q: 我下载并安装了MSXML3.EXE,但是我在程序中使用CreateObject("Microsoft.XMLDOM"),发现还是用原来

MSXML, 这是为什么?

A: 缺省情况下,MSXML3 会与老版本(MSXML 2.5 or 2.5 SP1, 2.6)并行地安装在系统中, 这就提供很大的灵活

性。但是,我们必须使用不同的Prog ID 来创建不同版本的对象。

例如: MSXML2.DOMDocument.2.6 MSXML2.DOMDocument.3.0 此外,也可以选择替换方式的安装。

详情请见: Installing Msxml3.dll in Replace Mode

Q: 如何在VB6.0获取Office文件的「摘要信息」?

A: 网站上已经有一个用VC++写好的DLL,提供给VB程式开发人员,无需打开Office,即可读取这些利用OLE结构

存储的文件。此DLL节省了程序开发人员相当多的时间。

Q: VB如何调用C DLL时的参数传递?

A: 首先必须了解此函数在C中的原型,包括参数类型和传递方式。

注意: 我们不推荐使用此方式, 如果DLL要接收一个字符串缓冲,一定要在调用前初始化字符串, 用户子

定义类型必须用ByRef方式传递, 任何内核对象的句柄(process, thread, module, file, filemapping,

semaphore等)和大多数GDI对象句柄都能用此方式传递。 API Viewer 能帮助我们声明API函数, 我们可以更据

需要修改参数传递方式。

数据可视化 Data Visualization 的原则和案例

原文地址: medium 原文     UXren的翻译

“仪表板”、“大数据”、“数据可视化”、“数据分析”——越来越多人和企业,开始运用他们的数据来做一些有趣的事情。 Telling the story with data!  Data-heavy interfaces. 很多人已经讨论过这个议题,我会围绕创作过程中最具影响力的部分。

一、用户不同,数据不同 Different users, different data

任何时候设计一套Complex system,inevitably要为很多用户users 和角色persona 进行设计.

总裁(Executives), 经理(managers), and 分析师 (analysts) are common personas that each have their own workflows and data needs.不同的角色有 完全不同的视角(perspective)and generating insights。

关于角色,重要的一点是预先确定好,围绕它们来组织信息结构与线框图 wireframes and IA should be around target persona

下面是我们去年做的一款健康报告应用的最终成品。这套系统有着不同的用户群,他们各自都需要不同的数据管理。 创建了关键角色后,我们每次评审会将它们放在旁边 。

做presentation的时候,在满屋子客户面前展示作品是件难事。无论是在解释线框图、流程图,还是就视觉设计进行讨论,都很难让每个人跟上你的观点。 通过角色来组织作品,会防止你(和客户)在这些讨论中跑题。

二、页面layout pattern

页面的layout很重要,如果一开始你就让用户找不到自己想要的 start with distractions,  audience 很难 seeing not just what each element is about, but the focus of the entire passage.

1) 重要的 Logical layout organizing principle : The Inverted Pyramid 

–The most important and substantial information is at the top,

–followed by the significant details that h elp you understand the overview above

them;

–and at the bottom you have general and background information, which will contain

much more detail and allow the reader or viewer to dive deeper

a good book talking about style :  “ Style: The Basics of Clarity and Grace ”.

2)  最小化原则 Minimalism: Less is More

每个页面不应超过5-9个chart,过多的内容会让用户分心。•Each dashboard should contain no more than 5-9 visualizations.  

•通过分层来减少视觉clutter ( avoid visual clutter by layering )

the data by using filters and hierarchies (e.g. instead of having one indicator for amount of

sales in North America and one for South America, give the user the option to apply a filter which changes the same indicator between one and the other) 

•如果真的有很多chart,只需要将他们分开几个页面即可 simply by breaking your dashboard into two or more separate dashboards.

3)不要让形式强过于内容 over-designed visualizations that aren't appropriate for the data.

**Spend your energy on selling the message, not the medium**

**Your job is to solve a problem, not make a picture**

三、选择正确的图形

最糟的是——这些“坏习惯”似乎在成倍增加。随处可见本应是饼形图的面积图,还有本应该是柱状图的曲线图。让我们一起来制止这些设计……下面这些建议有助于你正确对待数据

3.1 始于数据

未经处理的 原始数据表格 一点也没有吸引力。但它是 最佳的起点 。它帮你开始 思考数据中有哪些变量可用variables available,这些变量数据如何关联various data entities are related。

Checking out these great resources to help uncover interesting connections:

Designing Better charts with Google Sheets, Illustrator, and Sketch

Tableau — This tool is one of the best out there, but very expensive. *拆解Tableau的文章以后会有*  Tableau的视频链接

在整个过程中,这部分并没有灵丹妙药。别对深入研究数据心存恐惧,试着混合搭配不同变量,创建基本图表。这需要时间,但它是值得的。我想到的一些绝妙点子,都来自这些原始数据文件的拼拼凑凑。

3.2 处理离散数据和连续数据

每一种图表都有他最擅长表达的领域,数据也可以分类为:连续型数据和离散型数据。 It’s easy to pick charts that look good in your composition and hope your data works out.  

数据的种类 Types of data + 用户的目的 user's purpose  == which type of chart to choose.

离散数据 Discrete Data — distinct values you can count. For example, a number of goals scored or Facebook likes.

连续数据 Continuous Data ——任何范围值 range of value。比如一季的降雨量,或一个人的身高体重。

 So, how to choose the correct pattern ?

1)   Compare different discrete values over a period of time?comparison between different value across time or different categories.

  Bar Chart (length and end point of bar )清楚表达数据之间关系;说明每一个的具体数值;容易比较数值;容易看出趋势;

2) View trending ? 

    Line-chart

3) Analysis the percentage proportion, specially " part –to- whole" relationship ? 

   Pie charts are usually used to showrelational proportions between data and use arc length

to present the percentage of total.understand the relative contributions of each part to the whole清楚表达数据之间关系-尤其是part of whole;不能说明每一个的具体数值;不容易比较数值;无法看出趋势;(it's hard to compare slice)

4)view where/which area has the highest population , usage

    Distribution chart 

5) 观察几个不同的特点,技能等的分布情况 ( character strength )

      Radar Chart

“ The Wall Street Journal: Guide to information Graphics ” by Dona Wong. 帮我凝练了其中精髓。真希望几年前我就有这本书。这是本无价的参考书,帮你选用合适的图表,阐明信息展现的行为准则。

3.3  选择哪个analysis patterns?回答几个问题:(不需要都满足,根据使用条件)

–Clearly indicates how the values relate to one another, which in this case is a part-to-whole relationship - the number of deaths per cause, when summed, equal all deaths during the

year.清楚表达了数据间的关系

–Represents the quantities accurately.表达了具体的数值

–Makes it easy to compare the quantities.容易比较数值

–Makes it easy to see the ranked order of values, such as from the leading cause of death to the least.容易看出趋势或者顺序

–Makes obvious how people should use the information - what they should use it to accomplish - and encourages them to do this.明显让人明白如何使用数据

3.4 Dashboard 的目的:

1) 化繁为简,将抽象数据变成直接易懂的物理形态 To translate abstract data into easily understanding physical attribute (length, size, shape..), for better analysis and understand. –Make complex simple 

2)Explain Data to Solve Specific Problems : (解释数据) – answer view’s question

3)Explore Large Data Sets for Better Understanding (数据挖掘)

4)对于很直接的,常用的结果,直接用文字表达出来

四、基本的或定制化的图形 Basic vs. Custom visualizations

As the designer of these data-rich systems you have to constantly ask yourself “ should I let users to customize the chart ? Or should I use tried-and-true charts to articulate the message?”. 是可以让用户自我定制?还是采用统一的模板呈现?

最近无意中读到这篇来自 37 Signals的文章—— 只要3种图表就够了 。( )作者强烈表达一个观点,图形的“有效性”胜过它的视觉特征。我非常赞同文中这一观点。不过,我觉得他的观点代表着一种极端实用主义的视角。我相信定制化的图形通常也能提升数据的易用性,同时独具一格引人入胜。

然而,作为专业的设计师,我希望我的作品看起来和感觉上是独特且有用的。

比如,纽约时报做得很好,通过定制化的交互式图形,来为他们的文章添彩。可以在这里看到更多他们的作品。我们来看一些完美的定制化图表案例:这个案例对曲线图做了调整,让人“一睹”那些支撑图表的基本数据。(puts a twist on a line graph by offering a “peek” into the underlying data driving the chart. )结合了distribution chart 和line chart,distribution 作为背景。

五、让用户花 5秒钟,找到自己想要的

5.1  Dashboard should be able to answer your most frequently asked business questionsat a glance. Ad-hoc investigation will obviously take longer; but the most important metrics,the ones that are most frequently needed for the dashboard user during her workday, should immediately ‘pop’ from the screen.

答案是:这样人们才能使用——做决策、调研、预测未来,什么都行。关键是,用户不会沉浸于你所选的漂亮色彩,他们是来工作的。

我的建议是——在你排布好页面一切就绪后,问问自己“那又如何?”。看看每个图表、组件、表格,仔细考虑人们从中能获取到什么。

通常你会得出这样的结论,“这些都不重要”,这就意味着要减少或是重新思考。

这在我身上发生过好几次——我创作了复杂漂亮的仪表板,包含了一系列时尚的图表、饼形图,还有成千上万数据点构成的地图。

但总是被客户质疑“我只想知道这样有效吗……我要的东西在哪?”还有“我只要3样东西……X、Y和Z。哪里可以看到它们?”

哎,这时候你才会意识到自己迷失在杂草丛中,遗失了重点。

我会有个办法,尝试使用文字来精确表达人们所要的东西。

5.2  Method:

Understand user’s requirements , highlight it through: put it visible position, give text to directly indicate the result.

尝试使用文字来精确表达人们所要的东西。

在重要信息上,文字总结可能比图表更有效。两者都

通过文字展现用户所需的信息,并没有依赖需要解释说明的图表。

这个方法使我们的客户产生共鸣,尤其在重要信息上。但我之前提过,总要考虑各种角色,所以要用在适当的地方。就像其他所有形式的设计一样,它也需要一种平衡。

力求使你的数据与众不同,但是要避免过度设计和无谓的分心。

为数据选择正确的图形,但别忘了有层次地构建页面。

无论多么单调、令人沮丧,还要打磨每个小细节……还有别忘了问自己,“那又如何?”

c++考试怎么打开VS

一、打开vs2017主界面:

二、创建一个新项目

1、快捷键方法:Ctrl+Shift+N

2、可视化方法:文件 -- 打开 -- 项目

三、项目相关信息:

1、选择编程语言,此处以C++为例

2、选择项目类型,一般为 Windows控制台程序(就是黑窗程序)

Ps:项目名称和路径都不建议使用中文

四、好啦,现在可以开启你的代码之旅了:

五 、调试:

1、快捷键法:F5

2、可视化法:调试 -- 开始调试

ps:编译成功程序

六、运行:

1、快捷键法:Ctrl+F5

2、可视化法:调试 -- 开始执行(不调试 )

七、结果:

————————————————

版权声明:本文为CSDN博主「姑苏流白」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:

第5章 数据与可视化

可视化是监控的目标之一,没有一个好的展示,再多的数据我们也很难分析。这里主要对Grafana进行介绍,前面我们虽然也展示过Grafana数据可视化的界面,但是并没有深入介绍。

书本介绍了Prometheus自带的控制台界面,开启这个功能只需要在启动命令中添加相关的参数。但是,用这个方法作图的效率实在是太低了。实际使用中,都是通过配合Grafana一起使用的。关于console template的原文链接 点我

下面介绍Grafana。

Console Teamplet虽然能满足一定的可视化需求,但是也仅仅是对Prometheus的基本能力的补充。同时使用也会有许多问题,首先用户需要学习和了解Go Template模板语言,其它其支持的可视化图表类型也非常有限,最后其管理也有一定的成本。在第1章的“初识Prometheus”中我们已经尝试通过Grafana快速搭建过一个主机监控的Dashboard,在本章中将会带来读者学习如何使用Grafana创建更加精美的可视化报表。

首先Grafana是一个通用的可视化工具。‘通用’意味着Grafana不仅仅适用于展示Prometheus下的监控数据,也同样适用于一些其他的数据可视化需求。在开始使用Grafana之前,我们首先需要明确一些Grafana下的基本概念,以帮助用户能够快速理解Grafana。

对于Grafana而言,Prometheus这类为其提供数据的对象均称为数据源(Data Source)。目前,Grafana官方提供了对:Graphite, InfluxDB, OpenTSDB, Prometheus, Elasticsearch, CloudWatch的支持。对于Grafana管理员而言,只需要将这些对象以数据源的形式添加到Grafana中,Grafana便可以轻松的实现对这些数据的可视化工作。

通过数据源定义好可视化的数据来源之后,对于用户而言最重要的事情就是实现数据的可视化。在Grafana中,我们通过Dashboard来组织和管理我们的数据可视化图表:

如上所示,在一个Dashboard中一个最基本的可视化单元为一个 Panel(面板) ,Panel通过如趋势图,热力图的形式展示可视化数据。 并且在Dashboard中每一个Panel是一个完全独立的部分,通过Panel的 Query Editor(查询编辑器) 我们可以为每一个Panel自己查询的数据源以及数据查询方式,例如,如果以Prometheus作为数据源,那在Query Editor中,我们实际上使用的是PromQL,而Panel则会负责从特定的Prometheus中查询出相应的数据,并且将其可视化。由于每个Panel是完全独立的,因此在一个Dashboard中,往往可能会包含来自多个Data Source的数据。

Grafana通过插件的形式提供了多种Panel的实现,常用的如:Graph Panel,Heatmap Panel,SingleStat Panel以及Table Panel等。用户还可通过插件安装更多类型的Panel面板。

除了Panel以外,在Dashboard页面中,我们还可以定义一个 Row(行) ,来组织和管理一组相关的Panel。

除了Panel, Row这些对象以外,Grafana还允许用户为Dashboard定义 Templating variables(模板参数) ,从而实现可以与用户动态交互的Dashboard页面。同时Grafana通过JSON数据结构管理了整个Dasboard的定义,因此这些Dashboard也是非常方便进行共享的。Grafana还专门为Dashboard提供了一个共享服务: ,通过该服务用户可以轻松实现Dashboard的共享,同时我们也能快速的从中找到我们希望的Dashboard实现,并导入到自己的Grafana中。

作为一个通用可视化工具,Grafana除了提供灵活的可视化定制能力以外,还提供了面向企业的组织级管理能力。在Grafana中Dashboard是属于一个 Organization(组织) ,通过Organization,可以在更大规模上使用Grafana,例如对于一个企业而言,我们可以创建多个Organization,其中 User(用户) 可以属于一个或多个不同的Organization。 并且在不同的Organization下,可以为User赋予不同的权限。 从而可以有效的根据企业的组织架构定义整个管理模型。

对于Grafana而言,Prometheus就是一个用于存储监控样本数据的数据源(Data Source)通过使用PromQL查询特定Prometheus实例中的数据并且在Panel中实现可视化。

接下来,我们将带领读者了解如何通过Panel创建精美的可视化图表。

Panel是Grafana中最基本的可视化单元。每一种类型的面板都提供了相应的查询编辑器(Query Editor),让用户可以从不同的数据源(如Prometheus)中查询出相应的监控数据,并且以可视化的方式展现。

Grafana中所有的面板均以插件的形式进行使用,当前内置了11种类型的面板,常用的包括:Graph,Singlestat,Heatmap, Dashlist,Table以及Text等。

其中像Graph这样的面板允许用户可视化任意多个监控指标以及多条时间序列。而Siglestat则必须要求查询结果为单个样本。Dashlist和Text相对比较特殊,它们与特定的数据源无关。

通过Grafana UI用户可以在左边的菜单栏增加一个Dashboard,然后里面选择 Choose Visualization 即可看到下面这些的面板:

选择想要创建的面板类型即可。这里以Graph面板为例,选择Graph后我们看到有4个菜单的内容需要进行设置的。

最上面的那个是Queries,在这里要定义数据源以及查询的PromQL语句;第二个也就是上图看到的,这里可以定义图表显示的内容,比如x轴和y轴的设置;第三个是General,可以定义面板的名称以及注释等;最后一个是alert,配置告警信息(Grafana也可以做告警的)。

在通用设置中,除了一些Panel的基本信息以外,最主要的能力就是定义动态Panel的能力,这部分内容会在本章的“模板化Dashboard”小结中详细介绍。

这4个设置菜单里面,最重要是第一个菜单,也就是PromQL查询语言的编写,示例为我要显示CPU的使用率的情况,我这么设置:

公式为: avg(irate(node_cpu_seconds_total{mode!='idle'}[2m])) without (cpu)

在数据源的选择那里,有好几个选项。其中default是我们前面设定的默认数据源;Prometheus是我们添加的数据源;Grafana则用于需要查询Grafana自身状态时使用; Mixed用于需要从多个数据源中查询和渲染数据的场景;另外一个Dashboard不清楚了。这里我们选择Prometheus作为数据源。

选择好数据源之后,我们要配置查询的语句。Grafana提供了对PromQL的完整支持,在Query Editor中,可以添加任意个Query,并且使用PromQL表达式从Prometheus中查询相应的样本数据。

每个PromQL表达式都可能返回多条时间序列。**Legend **用于控制如何格式化每条时间序列的图例信息。Grafana支持通过模板的方式,根据时间序列的标签动态生成图例名称,例如:使用表示使用当前时间序列中的instance标签的值作为图例名称:

当查询到的样本数据量非常大时可以导致Grafana渲染图标时出现一些性能问题,通过 Min Step 可以控制Prometheus查询数据时的最小步长(Step),从而减少从Prometheus返回的数据量。

Resolution 选项,则可以控制Grafana自身渲染的数据量。例如,如果 Resolution 的值为 1/10 ,Grafana会将Prometeus返回的10个样本数据合并成一个点。因此 Resolution 越小(1小于10,也就是默认已经最小了)可视化的精确性越高,反之,可视化的精度越低。

Format 选项定义如何格式化Prometheus返回的样本数据。这里提供了3个选项:Table,Time Series和Heatmap,分别用于Tabel面板,Graph面板和Heatmap面板的数据可视化。

除此以外,Query Editor还提供了调试相关的功能,点击 Query Inspector 可以展开相关的调试面板:

在这里我们可以配置显示的样式,这里我只自定义了左边Y轴的数字格式,选择为百分比。

在这里我定义了面板的名称已经注释

这里我没有做定义,最后的图表如下:

Graph面板是最常用的一种可视化面板,其通过折线图或者柱状图的形式显示监控样本随时间而变化的趋势。我们继续用CPU的例子来做讲解:

查询公式为

上面的箭头指向, Add series override菜单,可以让我们自定义某一条折线的样式

继续往下,这里可以定义X、Y轴的情况,比如我把左边Y轴的单位改为百分数。

继续往下,这里可以定义图例的样式,也就是我们前面定义的 {{ instance }} 的样式,这里我选择用表格来显示,显示min、max和current的值。

继续往下,这里可以定义一个阈值,图表是告警的阈值。比如说我的CPU使用率超过50%,那就会显示不同的颜色,有一条阈值线。

这里和之前一样,只定义这个面板的名称和注释。

最后的图表是:

热力图这里不做介绍,这个用得稍微少点。可以看原文 点我

Singlem Panel侧重于展示系统的当前状态而非变化趋势。如下所示,在以下场景中特别适用于使用SingleStat:

如下所示,是使用SingleStat进行数据可视化的显示效果:

我们继续用CPU来说事,比如我这里定义CPU使用率低于50%就定义主机状态为健康,否则就是不健康。

对于SingleStat Panel而言,其只能处理一条时间序列,否则页面中会提示“Multiple Series Error”错误信息。这里使用上例一样的语句去查询:

首先我们新建一个singlestat面板,然后输入公式,这时候毫无疑问出现了错误提示:

为了能够正常显示,这里我们手动指定下单个实例,修改语句为:

这时候就有数据了,接下来我们要修改图表的样式。

默认情况下,当前面板显示的是平均值,我们实际要看的是当前的值.我们还要修改显示的颜色,这里我定义了两个值,小于0.5的时候显示绿色,大于0.8显示红色,中间显示橙色;然后设置显示折线图,并设置为绿色。

为了提高数字的可读性,我们把数字替换为文字。CPU使用率低于50%的时候显示为healthy,大于50%的时候显示为unhealthy。

配置面板名称及注释

最后的成品如下:

前面我们介绍的例子中,Grafana能够方便的将Prometheus返回的数据进行可视化展示。例如,在展示主机CPU使用率时,我们使用了如下表达式:

该表达式会返回当前Promthues中存储的所有时间序列,每一台主机都会有一条单独的曲线用于体现其CPU使用率的变化情况:

而当用户只想关注其中某些主机时,基于当前我们已经学习到的知识只有两种方式,要么每次手动修改Panel中的PromQL表达式,要么直接为这些主机创建单独的Panel。但是无论如何,这些硬编码方式都会直接导致Dashboard配置的频繁修改。在这一小节中我们将学习使用Dashboard变量的方式解决以上问题。

在Grafana中用户可以为Dashboard定义一组变量(Variables),变量一般包含一个到多个可选值。如下所示,Grafana通过将变量渲染为一个下拉框选项,从而使用户可以动态的改变变量的值:

例如,这里定义了一个名为node的变量,用户可以通过在PromQL表达式或者Panel的标题中通过以下形式使用该变量:

变量的值可以支持单选或者多选,当对接Prometheus时,Grafana会自动将$node的值格式化为如“ host1|host2|host3 ”的形式。配合使用PromQL的标签正则匹配“ =~ ”,通过动态改变PromQL从而实现基于标签快速对时间序列进行过滤。

通过Dashboard页面的Settings选项,可以进入Dashboard的配置页面并且选择Variables子菜单:

用户需要指定变量的名称,后续用户就可以通过$variable_name的形式引用该变量。Grafana目前支持7种不同的变量类型,而能和Prometheus一起工作的主要包含以下5种类型:

Label属性用于指定界面中变量的显示名称,Hide属性则用于指定在渲染界面时是否隐藏该变量的下拉框。

当Prometheus同时采集了多个主机节点的监控样本数据时,用户希望能够手动选择并查看其中特定主机的监控数据。这时我们需要使用Query类型的变量。

如上所示,这里我们为Dashboard创建了一个名为node的变量,并且指定其类型为Query。Query类型的变量,允许用户指定数据源以及查询表达式,并通过正则匹配(Regex)的方式对查询结果进行处理,从而动态生成变量的可选值。在这里指定了数据源为Prometheus,通过使用node_load1我们得到了两条时间序列:

通过指定正则匹配表达式为 /.*instance="([^"]*).*/ 从而匹配出标签instance的值作为node变量的所有可选项,即:

Selection Options 选项中可以指定该变量的下拉框是否支持多选,以及是否包含全选(All)选项。

保存变量后,用户可以在Panel的Queries中通过$node的方式使用该变量,如下所示:

这里需要注意的是,如果允许用户多选在PromQL表达式中应该使用标签的正则匹配模式,因为Grafana会自动将多个选项格式化为如“192.168.113.52:9100|192.168.113.70:9100”的形式。

使用Query类型的变量能够根据允许用户能够根据时间序列的特征维度对数据进行过滤。在定义Query类型变量时,除了使用PromQL查询时间序列以过滤标签的方式以外,Grafana还提供了几个有用的函数:

例如,当需要监控Prometheus所有采集任务的状态时,可以使用如下方式,获取当前所有采集任务的名称:

label_values(up, job)

例如,有时候我们想要动态修改变量查询结果。比如某一个节点绑定了多个ip,一个用于内网访问,一个用于外网访问,此时prometheus采集到的指标是内网的ip,但我们需要的是外网ip。这里我们想要能在Grafana中动态改变标签值,进行ip段的替换,而避免从prometheus或exporter中修改采集指标。

这时需要使用grafana的query_result函数

当在一个Panel中展示多条时间序列数据时,通过使用变量可以轻松实现对时间序列的过滤,提高用户交互性。除此以外,我们还可以使用变量自动生成Panel或者Row。 如下所示,当需要可视化当前系统中所有采集任务的监控任务运行状态时,由于Prometheus的采集任务配置可能随时发生变更,通过硬编码的形式实现,会导致Dashboard配置的频繁变更:

如下所示,这里为Dashboard定义了一遍名为job的变量:

通过使用label_values函数,获取到当前Promthues监控指标up中所有可选的job标签的值:

如果变量启用了Multi-value或者Include All Option选项的变量,那么在Panel的General选项的Repeat中可以选择自动迭代的变量,这里使用了Singlestat展示所有监控采集任务的状态:

Repeat选项设置完成后,Grafana会根据当前用户的选择,自动创建一个到多个Panel实例。 为了能够使Singlestat Panel能够展示正确的数据,如下所示,在Prometheus中,我们依然使用了 job 变量,不过此时的$job反应的是当前迭代的值:

最后的结果图如下,当我选择全部的时候,自动生成了6个Panel。

361知讯网

本文链接:http://pdidw.com/vs/45734.html

发表评论

评论列表

还没有评论,快来说点什么吧~