重要說明:本方是翻譯自https://docs.spring.io/spring-cloud-dataflow/docs/1.3.0.M2/reference/htmlsingle/#getting-started這個(gè)文章鹃愤,感謝Sabby AnandanMarius BogoeviciEric
BottardMark FisherIlayaperumal GopinathanGunnar HillertMark PollackPatrick
PeraltaGlenn RenfroThomas RisbergDave SyerDavid TuranskiJanne ValkealahtiOleg
Zhurakousky這些原文作者的寫作成果,讓我們能更好地入門學(xué)習(xí)Spring Cloud Data Flow的相關(guān)技術(shù),考慮到國內(nèi)中文的文檔資料比較欠缺,而且基本不太成體系干茉,所以自己希望來翻譯該文章,方便學(xué)習(xí)使用朵耕。
以下是原文內(nèi)容的翻譯攘轩,一些關(guān)鍵性的技術(shù)術(shù)語,本文考慮不進(jìn)行翻譯咐刨,保持原來的英文詞匯昙衅,加強(qiáng)技術(shù)術(shù)語印象,而且這些技術(shù)術(shù)語強(qiáng)行翻譯成中文的話定鸟,感覺很別扭而涉。另一方面水平有限,文本可能有翻譯不太貼切或是錯(cuò)誤的地方联予,還請大家體諒啼县,看到后多多指正。
目錄
13.1. 添加自定義JDBC驅(qū)動(dòng)... 4
14.4. 配置Spring Boot管理端點(diǎn)的安全性... 19
15.2. 監(jiān)控部署的應(yīng)用程序... 21
15.3. 日志和DataDog 指標(biāo)器(MetricWriter). 25
********************************以下是原文內(nèi)容的翻譯**********************
Version 1.3.0.M2
? 2012-2017 Pivotal Software, Inc.
你可以自己使用這個(gè)文章或是分發(fā)給其它人沸久,但前提是你不以賺取費(fèi)用為目標(biāo)季眷,同時(shí)每個(gè)轉(zhuǎn)發(fā)的文章必須包含此版權(quán)通知,無論是印刷品版本還是電子發(fā)行版本卷胯。
服務(wù)器配置
在本節(jié)中子刮,您將學(xué)習(xí)如何配置Spring
Cloud Data Flow服務(wù)器的功能,如關(guān)系型數(shù)據(jù)庫的使用和安全性配置窑睁。您還將學(xué)習(xí)如何配置Spring
Cloud Data Flow的Shell命令行工具的功能挺峡。
12.功能啟用/禁用
數(shù)據(jù)流服務(wù)器提供了一組特定功能葵孤,可以在啟動(dòng)時(shí)啟用/禁用這些功能特性。這些特性包括全生命周期的操作沙郭、REST接口風(fēng)格的端點(diǎn)(服務(wù)器佛呻、基于shell或UI的客戶端 ):
1. Streams
2. Tasks
3. 分析
在啟動(dòng)數(shù)據(jù)流服務(wù)器時(shí)裳朋,可以通過設(shè)置以下布爾屬性來啟用病线、禁用這些特性:
·spring.cloud.dataflow.features.streams-enabled
·spring.cloud.dataflow.features.tasks-enabled
·spring.cloud.dataflow.features.analytics-enabled
默認(rèn)情況下,所有功能都會啟用鲤嫡。注意:由于分析功能是默認(rèn)啟用的送挑,所以數(shù)據(jù)流服務(wù)器需要有一個(gè)redis存儲作為數(shù)據(jù)分析庫,我們提供一個(gè)默認(rèn)的基于Redis的分析功能實(shí)現(xiàn)類暖眼。這也意味著數(shù)據(jù)流服務(wù)器的健康狀態(tài)取決于redis存儲的可用性惕耕。如果你不想啟用HTTP端點(diǎn)來讀取Redis庫里的那些數(shù)據(jù),可以使用上邊的屬性配置來禁用分析功能诫肠。
REST風(fēng)格的端點(diǎn)司澎,提供了的功能啟用/禁用的狀態(tài)信息。
13. 數(shù)據(jù)庫配置
關(guān)系數(shù)據(jù)庫用于存儲stream和task的定義以及task的執(zhí)行狀態(tài)栋豫。Spring Cloud Data Flow為H2挤安,HSQLDB,MySQL丧鸯,Oracle蛤铜,DB2,SQL Server丛肢,PostgreSQL提供了相應(yīng)的數(shù)據(jù)架構(gòu)围肥,在服務(wù)器啟動(dòng)時(shí)將會自動(dòng)創(chuàng)建相應(yīng)的數(shù)據(jù)庫和表結(jié)構(gòu)。Spring
Cloud Data Flow本身提供了H2數(shù)據(jù)庫的嵌入式實(shí)例蜂怎,可以直接在開發(fā)環(huán)境當(dāng)中使用穆刻,但不推薦用于生產(chǎn)環(huán)境。
MySQL(使用MariaDB的驅(qū)動(dòng)) 杠步,HSQLDB蛹批, PostgreSQL 的JDBC驅(qū)動(dòng)程序, 和嵌入式 H2一樣篮愉,也是開箱即用的腐芍,平臺本身已經(jīng)自帶相應(yīng)的驅(qū)動(dòng)。如果你正在使用其他的數(shù)據(jù)庫试躏,那么相應(yīng)的JDBC驅(qū)動(dòng)程序JAR包需要存放在服務(wù)器的對應(yīng)classpath里猪勇。
數(shù)據(jù)庫屬性可以作為環(huán)境變量或命令行參數(shù)傳遞給數(shù)據(jù)流服務(wù)器。
· 環(huán)境變量:
export spring_datasource_url=jdbc:postgresql://localhost:5432/mydbexport spring_datasource_username=myuserexport spring_datasource_password=mypassexport spring_datasource_driver-class-name="org.postgresql.Driver"
如果你使用的是MySQL颠蕴,命令行參數(shù)是:
java -jar spring-cloud-dataflow-server-local/target/spring-cloud-dataflow-server-local-1.0.0.BUILD-SNAPSHOT.jar \? --spring.datasource.url=jdbc:mysql: \? --spring.datasource.username= \? --spring.datasource.password= \--spring.datasource.driver-class-name=org.mariadb.jdbc.Driver &
如果你使用的是PostgreSQL泣刹,命令行參數(shù)是:
java -jar spring-cloud-dataflow-server-local/target/spring-cloud-dataflow-server-local-1.0.0.BUILD-SNAPSHOT.jar \? --spring.datasource.url=jdbc:postgresql: \? --spring.datasource.username= \? --spring.datasource.password= \? --spring.datasource.driver-class-name=org.postgresql.Driver &
如果你使用的是HSQLDB助析,命令行參數(shù)是:
java -jar spring-cloud-dataflow-server-local/target/spring-cloud-dataflow-server-local-1.0.0.BUILD-SNAPSHOT.jar \? --spring.datasource.url=jdbc:hsqldb: \? --spring.datasource.username=SA \--spring.datasource.driver-class-name=org.hsqldb.jdbc.JDBCDriver &
數(shù)據(jù)存儲升級版 1.0.x 到 1.1.X的時(shí)候,需要升級新的數(shù)據(jù)架構(gòu)到Spring Cloud Data Flow椅您,具體數(shù)據(jù)庫類型的遷移腳本的可以在相應(yīng)的位置找到外冀。如果你想使用一個(gè)外部的H2數(shù)據(jù)庫實(shí)例而不是一個(gè)嵌入式的,設(shè)置Spring Cloud Data
Flow的spring.dataflow.embedded.database.enabled 屬性為false掀泳。如果spring.dataflow.embedded.database.enabled 屬性為false或者指定了其他數(shù)據(jù)庫類型作為數(shù)據(jù)源雪隧,那么h2嵌入式數(shù)據(jù)庫是不會啟用的。
13.1. 添加自定義JDBC驅(qū)動(dòng)
為數(shù)據(jù)庫添加自定義驅(qū)動(dòng)程序员舵,如Oracle脑沿,建議您重新編譯數(shù)據(jù)流服務(wù)器,在Maven的POM.XML文件中添加依賴马僻。每個(gè)目標(biāo)平臺都有Spring Cloud Data Flow服務(wù)器的對應(yīng)版本庄拇,您需要針對每個(gè)平臺修改相應(yīng)版本的 POM.XML文件。在每個(gè)GitHub庫中有每個(gè)服務(wù)器版本對應(yīng)的標(biāo)簽韭邓。
為本地服務(wù)器添加自定義JDBC驅(qū)動(dòng)的依賴JAR包:
1. 選擇你需要重新編譯的對應(yīng)服務(wù)器版本的標(biāo)簽措近,在 GitHub庫里進(jìn)行克隆。
2. 編輯spring-cloud-dataflow-server-local/pom.xml文件女淑,在dependencies部分添加數(shù)據(jù)庫驅(qū)動(dòng)程序所需的的依賴瞭郑。在下面的示例中,選定了Oracle驅(qū)動(dòng)程序诗力。
... ? com.oracle.jdbc? ojdbc8? 12.2.0.1 ...
3. 重新編譯Spring
Cloud Data Flow凰浮,具體內(nèi)容查看:
https://docs.spring.io/spring-cloud-dataflow/docs/1.3.0.M2/reference/htmlsingle/#building
在重新編譯Spring
Cloud Data Flow的時(shí)候,可以通過設(shè)置 dataflow-server.yml文件中的屬性苇本,給相應(yīng)的版本設(shè)置屬性的默認(rèn)值袜茧。
如,像下邊這樣來設(shè)置postgres這個(gè)屬性的默認(rèn)值:
· dataflow-server.yml
spring: datasource:? url: jdbc:postgresql://localhost:5432/mydb? username: myuser? password: mypass? driver-class-name:org.postgresql.Driver
14. 安全性
默認(rèn)情況下瓣窄,數(shù)據(jù)流服務(wù)器是不安全的笛厦,運(yùn)行在一個(gè)未加密的HTTP連接上。通過啟用HTTPS并要求客戶端使用以下兩種身份驗(yàn)證俺夕,您可以確保REST端點(diǎn)以及數(shù)據(jù)流儀表板的安全性:
· OAuth 2.0認(rèn)證
· 傳統(tǒng)認(rèn)證方式 (如 Basic 認(rèn)證)
認(rèn)證選項(xiàng)
當(dāng)選擇 傳統(tǒng)認(rèn)證裳凸,Spring Cloud Data Flow服務(wù)器將成為主要的認(rèn)證點(diǎn),使用Spring
Security作為基礎(chǔ)劝贸。當(dāng)選擇此選項(xiàng)時(shí)姨谷,用戶需要進(jìn)一步定義他們首選的認(rèn)證機(jī)制,選擇所需的后臺認(rèn)證存儲:
· 單用戶認(rèn)證映九,https://docs.spring.io/spring-cloud-dataflow/docs/1.3.0.M2/reference/htmlsingle/#configuration-security-single-user-authentication
· LPAD認(rèn)證梦湘,https://docs.spring.io/spring-cloud-dataflow/docs/1.3.0.M2/reference/htmlsingle/#configuration-security-ldap-authentication
傳統(tǒng)認(rèn)證 或 oauth2之間進(jìn)行選擇的時(shí)候,記住這兩個(gè)選項(xiàng)是互斥的捌议。請看下面的子章節(jié)進(jìn)行更詳細(xì)的討論哼拔。
默認(rèn)情況下,REST端點(diǎn)(用于管理和狀態(tài)查看)以及儀表板UI不需要經(jīng)過身份驗(yàn)證就可以訪問瓣颅。
14.1. 啟用HTTPS
默認(rèn)情況下倦逐,儀表板,管理宫补,和狀態(tài)端點(diǎn)使用HTTP作為傳輸協(xié)議檬姥。你可以很容易地將他們切換到HTTPS,在 application.yml配置文件中添加證書守谓。
server: port: 8443? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ssl:? key-alias: yourKeyAlias? ? ? ? ? ? ? ? ? ? ? ? ? ? key-store: path/to/keystore? ? ? ? ? ? ? ? ? ? ? ? key-store-password: yourKeyStorePassword? ? ? ? ? ? key-password: yourKeyPassword? ? ? ? ? ? ? ? ? ? ? trust-store: path/to/trust-store? ? ? ? ? ? ? ? trust-store-password: yourTrustStorePassword
默認(rèn)端口是 9393穿铆,你可以修改端口為更常見的HTTPS典型端口您单。
如果啟用了HTTPS斋荞,它將完全替代HTTP作為REST端點(diǎn)和數(shù)據(jù)流儀表板交互的協(xié)議。普通HTTP請求將失敗虐秦。因此平酿,請確保您相應(yīng)地啟用了shell命令行。
14.1.1. 使用自簽名證書
為了測試目的或在開發(fā)階段悦陋,創(chuàng)建自簽名證書很方便蜈彼。請執(zhí)行以下命令來創(chuàng)建證書:
$ keytool -genkey -alias dataflow -keyalg RSA -keystore dataflow.keystore \? ? ? ? -validity 3650 -storetype JKS \? ? ? ? -dname "CN=localhost, OU=Spring, O=Pivotal, L=Kailua-Kona, ST=HI, C=US"? ? ? ? ? -keypass dataflow -storepass dataflow
cn 是這里唯一重要的參數(shù),它是使用的域名俺驶,如 localhost幸逆。
然后添加以下內(nèi)容到你 的application.yml文件里:
server: port: 8443 ssl:? enabled: true? key-alias: dataflow? key-store: "/your/path/to/dataflow.keystore"? key-store-type: jks? key-store-password: dataflow? key-password: dataflow
這是數(shù)據(jù)流服務(wù)器所需要的配置。一旦你啟動(dòng)服務(wù)器暮现,你應(yīng)該能夠訪問https://localhost:8443/还绘。由于這是一個(gè)自簽名證書,您將在瀏覽器中看到一個(gè)警告栖袋,需要忽略它拍顷。
14.1.2. 自簽名證書和Shell
默認(rèn)情況下,自簽名證書會影響shell的正常使用塘幅,需要額外的配置步驟來使shell可以結(jié)合自簽名證書工作昔案。有兩種方法可以實(shí)現(xiàn):
1.添加自簽名證書到JVM的信任庫中
2.跳過證書驗(yàn)證
添加自簽名證書到JVM的信任庫
我們需要從密鑰庫導(dǎo)出以前創(chuàng)建的證書:
$ keytool -export -alias dataflow -keystore dataflow.keystore -file dataflow_cert -storepass dataflow
接下來,我們需要?jiǎng)?chuàng)建一個(gè)shell使用的密鑰庫:
$ keytool -importcert -keystore dataflow.truststore -alias dataflow -storepass dataflow -file dataflow_cert -noprompt
現(xiàn)在你可以使用以下的命令行來啟動(dòng)Data Flow的shell:
$ java -Djavax.net.ssl.trustStorePassword=dataflow \? ? ? -Djavax.net.ssl.trustStore=/path/to/dataflow.truststore \? ? ? -Djavax.net.ssl.trustStoreType=jks \? ? ? -jar spring-cloud-dataflow-shell-1.3.0.M2.jar
In case you run into
trouble establishing a connection via SSL, you can enable additional logging
by using and setting thejavax.net.debugJVM
argument tossl.
不要忘記設(shè)置目標(biāo)服務(wù)器的正確URL:
dataflow:> dataflow config server https://localhost:8443/
跳過證書驗(yàn)證或者电媳,你也可以通過提供可選的命令行參數(shù)--dataflow.skip-ssl-validation=true來跳過驗(yàn)證 踏揣。
使用此命令行參數(shù)后,shell將接受任何(自簽名)SSL證書匾乓。
如果可能的話捞稿,你應(yīng)該避免使用此選項(xiàng)。禁用信任管理器會就失去了SSL的意義,并容易受到攻擊括享。
14.2. 傳統(tǒng)認(rèn)證
當(dāng)使用 傳統(tǒng)認(rèn)證時(shí)搂根, Spring Cloud Data Flow將是唯一的身份驗(yàn)證提供程序。在這種情況下铃辖,數(shù)據(jù)流的REST API用戶會使用 基本認(rèn)證來訪問端點(diǎn)剩愧。
使用該選項(xiàng)時(shí),用戶可以選擇3種后備存儲來完成認(rèn)證:
?單用戶認(rèn)證 娇斩,使用Spring Boot的屬性
?基于YAML文件的多用戶認(rèn)證
?LDAP認(rèn)證
14.2.1. 單用戶認(rèn)證
這是最簡單的選項(xiàng)仁卷,模擬了默認(rèn)的Spring Boot用戶體驗(yàn)行為。它可以通過添加以下屬性到應(yīng)用程序的application.yml文件或環(huán)境變量來啟用:
security: basic:? enabled: true? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? realm: Spring Cloud Data Flow
啟用基本身份驗(yàn)證犬第。必須將安全屬性設(shè)置為true锦积。
(可選)基本身份驗(yàn)證領(lǐng)域?qū)⒛J(rèn) 為Spring ,如果沒有設(shè)置的話歉嗓。
在當(dāng)前案例中丰介,Spring Boot啟動(dòng)時(shí)會自動(dòng)創(chuàng)建一個(gè)用戶叫 “user”并自動(dòng)生成密碼,這些信息會被打印到控制臺上鉴分。
采用這個(gè)配置所產(chǎn)生的用戶哮幢,將分配所有主要的角色權(quán)限:
· VIEW
· CREATE
· MANAGE
默認(rèn)的Spring Boot用戶憑證
你可以使用以下屬性來自定義用戶的相關(guān)信息:
security.user.name=user # Default user name.security.user.password= # Password for the default user name. A random password is logged on startup by default.security.user.role=VIEW, CREATE, MANAGE # Granted roles for the default user name.
請注意基本身份驗(yàn)證本身固有的問題,由于憑據(jù)被瀏覽器緩存志珍,瀏覽網(wǎng)頁進(jìn)行回退到應(yīng)用程序的頁面橙垢,你會自動(dòng)登錄進(jìn)入系統(tǒng)。
當(dāng)然伦糯,您也可以使用系統(tǒng)屬性柜某、環(huán)境變量或命令行參數(shù)傳遞認(rèn)證信息,這些都是Spring Boot支持的標(biāo)準(zhǔn)方法敛纲。例如喂击,在下面的示例中,使用命令行參數(shù)來指定用戶憑據(jù):
$ java -jar spring-cloud-dataflow-server-local-1.3.0.M2.jar\? --security.basic.enabled=true \? --security.user.name=test \? --security.user.password=pass \? --security.user.role=VIEW
如果你需要定義多個(gè)基于文件的用戶帳號载慈,請看看基于文件的認(rèn)證惭等。
14.2.2. 基于文件的認(rèn)證
默認(rèn)情況下,Spring Boot只允許設(shè)置一個(gè)用戶办铡。Spring Cloud Data Flow還支持在配置文件中設(shè)置多個(gè)用戶辞做。如下所述,每個(gè)用戶必須指定一個(gè)密碼寡具,一個(gè)或多個(gè)角色:
security: basic:? enabled: true? realm: Spring Cloud Data Flowspring: cloud:? dataflow:? ? security:? ? ? authentication:? ? ? ? file:? ? ? ? ? enabled: true? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? users:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? bob: bobspassword, ROLE_MANAGE? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? alice: alicepwd, ROLE_VIEW, ROLE_CREATE
14.2.3. LDAP認(rèn)證
Spring Cloud Data Flow還支持使用LDAP服務(wù)器(輕量級目錄訪問協(xié)議)的身份驗(yàn)證秤茅,支持以下2種模式:
?直接綁定
?搜索和綁定
當(dāng)LDAP身份驗(yàn)證選項(xiàng)被激活時(shí),默認(rèn)的單用戶認(rèn)證模式將被關(guān)閉童叠。
在采用直接綁定模式時(shí)框喳,認(rèn)證模式是使用用戶定義的可分辨名稱(DN)课幕,它是使用占位符的用戶名。身份驗(yàn)證過程通過替換占位符派生出用戶的專有名稱五垮,并使用它在LDAP服務(wù)器上進(jìn)行用戶身份驗(yàn)證乍惊,同時(shí)提供所需要的密碼。您可以設(shè)置LDAP直接綁定如下:
security: basic:? enabled: true? realm: Spring Cloud Data Flowspring: cloud:? dataflow:? ? security:? ? ? authentication:? ? ? ? ldap:? ? ? ? ? enabled: true? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? url: ldap://ldap.example.com:3309? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? userDnPattern: uid={0},ou=people,dc=example,dc=com
采用搜索綁定 模式時(shí)放仗,先以匿名方式或一個(gè)固定的賬戶連接到LDAP服務(wù)器润绎,然后基于用戶名的標(biāo)識來尋找認(rèn)證用戶,然后使用查找到的用戶名和相應(yīng)的密碼綁定到LDAP服務(wù)器诞挨。此選項(xiàng)配置如下:
security: basic:? enabled: true? realm: Spring Cloud Data Flowspring: cloud:? dataflow:? ? security:? ? ? authentication:? ? ? ? ldap:? ? ? ? ? enabled: true? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? url: ldap://localhost:10389? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? managerDn: uid=admin,ou=system? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? managerPassword: secret? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? userSearchBase: ou=otherpeople,dc=example,dc=com? ? ? ? ? ? ? ? ? ? ? ? userSearchFilter: uid={0}
LDAP 傳輸安全
當(dāng)連接到LDAP服務(wù)器時(shí)莉撇,通常(在LDAP的環(huán)境中)有2個(gè)選項(xiàng),可以支持建立到LDAP服務(wù)器的安全連接:
· LDAP over SSL (LDAPs)
· Start Transport Layer Security (Start TLS)
Spring Cloud Data Flow 1.1.0只默認(rèn)直接支持LDAPs惶傻,其它的需要單獨(dú)配置棍郎。使用官方證書時(shí),不需要特殊的配置银室,為了通過LDAPS連接到LDAP服務(wù)器涂佃,只需改變URL的格式,采用 LDAPS格式即可粮揉,例如ldaps://localhost:636巡李。
在使用自簽名證書的情況下抚笔,Spring
Cloud Data Flow服務(wù)器的設(shè)置變得稍微復(fù)雜一些扶认。相應(yīng)的配置與 Spring
Cloud Data Flow服務(wù)器使用自簽名證書配置非常相似,也就是Spring
Cloud Data Flow需要基于一個(gè)trustStore才能正常運(yùn)行 殊橙。
這樣的配置適合在開發(fā)和測試期間使用辐宾,但請不要在生產(chǎn)中使用自簽名證書,不然信任問題不少膨蛮。
最后叠纹,還必須提供一套關(guān)于trustStore的配置參數(shù)與憑據(jù)來啟動(dòng)服務(wù)器:
$ java -Djavax.net.ssl.trustStorePassword=dataflow \? ? ? -Djavax.net.ssl.trustStore=/path/to/dataflow.truststore \? ? ? -Djavax.net.ssl.trustStoreType=jks \? ? ? -jar spring-cloud-starter-dataflow-server-local-1.3.0.M2.jar
正如上面提到的,另一個(gè)連接LDAP服務(wù)器的安全選項(xiàng)是通過StartTLS敞葛。雖然Start TLS受到更多人的青睞誉察,以至于LDAPs技術(shù)被認(rèn)為是重復(fù),沒必要的 惹谐。然而StartTLS目前并不是Spring Cloud Data Flow能直接支持的持偏。至于如何配置的問題,還需要去查看相關(guān)的資料氨肌。
14.2.4.
Shell 認(rèn)證
當(dāng)使用Shell認(rèn)證的時(shí)候鸿秆,你可以直接在命令行參數(shù)當(dāng)中直接提供相應(yīng)的用戶名與密碼:
$ java -jar target/spring-cloud-dataflow-shell-1.3.0.M2.jar? \ --dataflow.username=myuser? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? \? ? --dataflow.password=mysecret
如果開啟了認(rèn)證,那么用戶名是必須要提供的怎囚,如果沒有提供相應(yīng)的密碼卿叽,那么控制臺會進(jìn)行提示,需要你輸入相應(yīng)的密碼。
你可以在使用shell時(shí)直接指定相應(yīng)的Data Flow服務(wù)器:
server-unknown:>dataflow config server --uri? http://localhost:9393? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? \? ? --username myuser? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? \? ? --password mysecret? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? \? ? --skip-ssl-validation? true? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? \
14.2.5. 自定義授權(quán)
除了上邊所講的關(guān)于認(rèn)證的配置外考婴,也可以配置自定義授權(quán)贩虾,確定什么角色可以做什么。
默認(rèn)的方案使用三個(gè)角色來保護(hù)Spring
Cloud Data Flow暴露的REST風(fēng)格的端點(diǎn):
·ROLE_VIEW:查看系統(tǒng)各種狀態(tài)
·ROLE_CREATE:創(chuàng)建沥阱,刪除或是修改系統(tǒng)的狀態(tài)
·ROLE_MANAGE:啟動(dòng)與管理端點(diǎn)
所有這些默認(rèn)值都是在dataflow-server-defaults.yml文件里設(shè)置的整胃,這配置也是Spring
Cloud Data Flow的核心模塊。如果有需要的話喳钟,你也可以在 application.yml文件里重寫這些配置脓匿。這些配置采用了YAML 列表的形式 (一些規(guī)則可能優(yōu)先于其他的),所以你需要復(fù)制/粘貼整個(gè)列表來定制你的需求(沒有辦法合并列表)锐锣。默認(rèn)的規(guī)則是這樣的:
spring: cloud:? dataflow:? ? security:? ? ? authorization:? ? ? ? enabled: true? ? ? ? rules:? ? ? ? ? # Metrics? ? ? ? ? - GET? ? /metrics/streams? ? ? ? ? ? ? ? => hasRole('ROLE_VIEW')? ? ? ? ? # About? ? ? ? ? - GET? ? /about? ? ? ? ? ? ? ? ? ? ? ? ? => hasRole('ROLE_VIEW')? ? ? ? ? # Metrics? ? ? ? ? - GET? ? /metrics/**? ? ? ? ? ? ? ? ? ? => hasRole('ROLE_VIEW')? ? ? ? ? - DELETE /metrics/**? ? ? ? ? ? ? ? ? ? => hasRole('ROLE_CREATE')? ? ? ? ? # Boot Endpoints? ? ? ? ? - GET? ? /management/**? ? ? ? ? ? ? ? ? => hasRole('ROLE_MANAGE')? ? ? ? ? # Apps? ? ? ? ? - GET? ? /apps? ? ? ? ? ? ? ? ? ? ? ? ? => hasRole('ROLE_VIEW')? ? ? ? ? - GET? ? /apps/**? ? ? ? ? ? ? ? ? ? ? ? => hasRole('ROLE_VIEW')? ? ? ? ? - DELETE /apps/**? ? ? ? ? ? ? ? ? ? ? ? => hasRole('ROLE_CREATE')? ? ? ? ? - POST? /apps? ? ? ? ? ? ? ? ? ? ? ? ? => hasRole('ROLE_CREATE')? ? ? ? ? - POST? /apps/**? ? ? ? ? ? ? ? ? ? ? ? => hasRole('ROLE_CREATE')? ? ? ? ? # Completions? ? ? ? ? - GET /completions/**? ? ? ? ? ? ? ? ? ? => hasRole('ROLE_CREATE')? ? ? ? ? # Job Executions & Batch Job Execution Steps && Job Step Execution Progress? ? ? ? ? - GET? ? /jobs/executions? ? ? ? ? ? ? ? => hasRole('ROLE_VIEW')? ? ? ? ? - PUT? ? /jobs/executions/**? ? ? ? ? ? => hasRole('ROLE_CREATE')? ? ? ? ? - GET? ? /jobs/executions/**? ? ? ? ? ? => hasRole('ROLE_VIEW')? ? ? ? ? # Batch Job Instances? ? ? ? ? - GET? ? /jobs/instances? ? ? ? ? ? ? ? => hasRole('ROLE_VIEW')? ? ? ? ? - GET? ? /jobs/instances/*? ? ? ? ? ? ? => hasRole('ROLE_VIEW')? ? ? ? ? # Running Applications? ? ? ? ? - GET? ? /runtime/apps? ? ? ? ? ? ? ? ? => hasRole('ROLE_VIEW')? ? ? ? ? - GET? ? /runtime/apps/**? ? ? ? ? ? ? ? => hasRole('ROLE_VIEW')? ? ? ? ? # Stream Definitions? ? ? ? ? - GET? ? /streams/definitions? ? ? ? ? ? => hasRole('ROLE_VIEW')? ? ? ? ? - GET? ? /streams/definitions/*? ? ? ? ? => hasRole('ROLE_VIEW')? ? ? ? ? - GET? ? /streams/definitions/*/related? => hasRole('ROLE_VIEW')? ? ? ? ? - POST? /streams/definitions? ? ? ? ? ? => hasRole('ROLE_CREATE')? ? ? ? ? - DELETE /streams/definitions/*? ? ? ? ? => hasRole('ROLE_CREATE')? ? ? ? ? - DELETE /streams/definitions? ? ? ? ? ? => hasRole('ROLE_CREATE')? ? ? ? ? # Stream Deployments? ? ? ? ? - DELETE /streams/deployments/*? ? ? ? ? => hasRole('ROLE_CREATE')? ? ? ? ? - DELETE /streams/deployments? ? ? ? ? ? => hasRole('ROLE_CREATE')? ? ? ? ? - POST? /streams/deployments/*? ? ? ? ? => hasRole('ROLE_CREATE')? ? ? ? ? # Task Definitions? ? ? ? ? - POST? /tasks/definitions? ? ? ? ? ? ? => hasRole('ROLE_CREATE')? ? ? ? ? - DELETE /tasks/definitions/*? ? ? ? ? ? => hasRole('ROLE_CREATE')? ? ? ? ? - GET? ? /tasks/definitions? ? ? ? ? ? ? => hasRole('ROLE_VIEW')? ? ? ? ? - GET? ? /tasks/definitions/*? ? ? ? ? ? => hasRole('ROLE_VIEW')? ? ? ? ? # Task Executions? ? ? ? ? - GET? ? /tasks/executions? ? ? ? ? ? ? => hasRole('ROLE_VIEW')? ? ? ? ? - GET? ? /tasks/executions/*? ? ? ? ? ? => hasRole('ROLE_VIEW')? ? ? ? ? - POST? /tasks/executions? ? ? ? ? ? ? => hasRole('ROLE_CREATE')? ? ? ? ? - DELETE /tasks/executions/*? ? ? ? ? ? => hasRole('ROLE_CREATE')
每一行的格式是這樣的:
HTTP_METHOD URL_PATTERN '=>' SECURITY_ATTRIBUTE
· HTTP_METHOD: http的請求方式, 大寫
· URL_PATTERN :Ant 風(fēng)格的URL
· SECURITY_ATTRIBUTE: SpEL表達(dá)式
· 這些元素都需要用空格鍵, tab鍵這樣的空白符來進(jìn)行分隔未蝌。
注意,這是一個(gè)YAML列表而不是spring.cloud.dataflow.security.authorization.rules下的鍵值對映射(因此第一行使用“-”線開始 ) 易茬。
如果你僅僅是希望控制認(rèn)證酬蹋,而不想管理授權(quán),那么可以設(shè)置每個(gè)用戶就可以訪問所有的端點(diǎn)抽莱,那么可以這樣設(shè)置spring.cloud.dataflow.security.authorization.enabled=false范抓。
如果安全屬性使用的是基本認(rèn)證,那么為用戶設(shè)置角色是很必要的食铐。
例如,
java -jar spring-cloud-dataflow-server-local/target/spring-cloud-dataflow-server-local-1.3.0.M2.jar \? --security.basic.enabled=true \? --security.user.name=test \? --security.user.password=pass \? --security.user.role=VIEW
14.2.6. 授權(quán) - Shell 和儀表板的行為特性
授權(quán)啟用后匕垫,儀表板 和 shell 將根據(jù)用戶所分配的角色而給用戶看到和使用不同的功用。
如果用戶沒有相應(yīng)的角色虐呻,shell命令將被標(biāo)記為不可使用象泵。
如果用戶沒有相應(yīng)的角色授權(quán),那么儀表板的用戶界面將不顯示對應(yīng)的頁面或者頁面元素 斟叼。
14.2.7. 基于Ldap授權(quán)
當(dāng)配置LDAP來進(jìn)行身份驗(yàn)證時(shí)偶惠,可以同時(shí)配置group-role-attribute,group-search-base和group-search-filter朗涩。
在沒有特別指定的情況下忽孽,group role這個(gè)屬性包含了角色的名字。role_manage是默認(rèn)角色谢床。
如需進(jìn)一步信息兄一,請查看Spring
Security 的LDAP服務(wù)器 參考指南。
14.3. OAuth 2.0
OAuth 2 允許可以將Spring
Cloud Data Flow集成到單一登錄(SSO)的環(huán)境當(dāng)中萤悴。以下3 種oauth2授權(quán)模式可以供使用:
?授權(quán)碼:用于圖形用戶界面(瀏覽器)的整合瘾腰。你將被重定向到OAuth認(rèn)證服務(wù)。
?密碼 :shell會使用到覆履,你可以使用用戶名和密碼登錄蹋盆。
?客戶端憑據(jù): 直接從OAuth提供者獲取訪問令牌,通過使用AuthorizationHTTP
header 發(fā)送到數(shù)據(jù)流服務(wù)器费薄。
REST風(fēng)格的端點(diǎn)可以使用2種方式訪問:
?基本認(rèn)證,使用 密碼授權(quán)類型栖雾,基于 OAuth2服務(wù)來認(rèn)證楞抡。
?訪問令牌,使用 客戶端證書授權(quán)類型
在設(shè)置身份驗(yàn)證時(shí)析藕,強(qiáng)烈建議啟用HTTPS召廷,尤其是在生產(chǎn)環(huán)境中。
你可以通過在application.yml配置文件或是通過環(huán)境變量來打開oauth2認(rèn)證:
security: oauth2:? client:? ? client-id: myclient? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? client-secret: mysecret? ? access-token-uri: http://127.0.0.1:9999/oauth/token? ? user-authorization-uri: http://127.0.0.1:9999/oauth/authorize? resource:? ? user-info-uri: http://127.0.0.1:9999/me
在OAuth的配置節(jié)中設(shè)置了Client Id這個(gè)屬性账胧,將會使系統(tǒng)啟用OAuth2的安全認(rèn)證竞慢。
你可以用curl來驗(yàn)證基本認(rèn)證是否正常啟用:
$ curl -u myusername:mypassword http://localhost:9393/
返回的結(jié)果應(yīng)該是可以使用的REST風(fēng)格的端點(diǎn)列表。
除了基本身份驗(yàn)證外治泥,還可以提供訪問令牌以訪問REST API筹煮。可以從oauth2提供者檢索oauth2訪問令牌居夹,然后通過訪問令牌API使用AuthorizationHttp header發(fā)送給服務(wù)器:
$ curl -H "Authorization: Bearer " http://localhost:9393/
14.3.1.
OAuth REST 端點(diǎn)的授權(quán)
oauth2認(rèn)證選項(xiàng)使用的授權(quán)規(guī)則與 傳統(tǒng)認(rèn)證 選項(xiàng)的一樣败潦。
授權(quán)規(guī)則在dataflow-server-defaults.yml文件當(dāng)中。
由于安全角色的定義是與具體的環(huán)境相關(guān)聯(lián)的准脂,Spring
Cloud Data Flow
默認(rèn)情況下會將所有角色賦與oauth2認(rèn)證的用戶劫扒,框架使用的授權(quán)對應(yīng)類是DefaultDataflowAuthoritiesExtractor。
系統(tǒng)可以自定義行為特征狸膏,這需要提供自己的Spring bean來擴(kuò)展Spring Security的基于OAuth的AuthoritiesExtractor接口沟饥。在這種情況下,自定義bean定義優(yōu)先于Spring Cloud Data Flow提供的环戈。
14.3.2. 使用shell的OAuth
認(rèn)證
如果OAuth2提供者提供了密碼授權(quán)類型闷板,那么可以用下邊的方式來啟動(dòng)shell:
$ java -jar spring-cloud-dataflow-shell-1.3.0.M2.jar \ --dataflow.uri=http://localhost:9393 \ --dataflow.username=my_username --dataflow.password=my_password
記住,當(dāng)Spring Cloud Data Flow的認(rèn)證啟用后院塞,oauth2提供者 必須 支持 密碼授權(quán)類型,不然就沒法使用shell了性昭。
在shell當(dāng)中拦止,還可以使用以下的方式來提供使用證書:
dataflow config server --uri http://localhost:9393 --username my_username --password my_password
運(yùn)行成功的話,你會看到下邊的輸出:
dataflow:>dataflow config infodataflow config info╔═══════════╤═══════════════════════════════════════╗║Credentials│[username='my_username, password=****']║╠═══════════╪═══════════════════════════════════════╣║Result? ? │? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ║║Target? ? │http://localhost:9393? ? ? ? ? ? ? ? ? ║╚═══════════╧═══════════════════════════════════════╝
14.3.3. OAuth2
認(rèn)證示例
Local OAuth2
Server
使用SpringSecurity OAuth的兩個(gè)簡單注解屬性糜颠,可以很容易地建立OAuth2 的服務(wù)器:
· @EnableResourceServer
· @EnableAuthorizationServer
下邊的URL鏈接內(nèi)容是一個(gè)相應(yīng)的示例:
https://github.com/ghillert/oauth-test-server/
簽出這個(gè)代碼汹族,編譯好后運(yùn)行起來,同時(shí)可以把Client Id和Client
Secret
配置到Spring Cloud Data Flow里 其兴。
使用GitHub進(jìn)行認(rèn)證
如果你想使用一個(gè)現(xiàn)成的oauth2提供商顶瞒,這里有一個(gè)基于GitHub的例子。首先你需要在你的Github帳號下新建一個(gè)應(yīng)用 元旬,地址如下:
https://github.com/settings/developers
當(dāng)你在本地機(jī)器運(yùn)行Spring Cloud Data Flow的時(shí)候榴徐,GitHub的配置類似下面這樣:
GitHub上注冊應(yīng)用程序
在Authorization callback URL這一項(xiàng)里守问,你可以輸入Spring Cloud Data Flow的登錄URL,類似localhost:9393/login
配置GitHub 的Client Id 和 Secret到 Spring Cloud Data Flow 當(dāng)中:
security: oauth2:? client:? ? client-id: your-github-client-id? ? client-secret: your-github-client-secret? ? access-token-uri: https://github.com/login/oauth/access_token? ? user-authorization-uri: https://github.com/login/oauth/authorize? resource:? ? user-info-uri: https://api.github.com/user
GitHub并不支持OAuth2的密碼授權(quán)類型坑资,Spring Cloud Data Flow的 Shell沒法使用GitHub來進(jìn)行認(rèn)證耗帕。
14.4. 配置Spring Boot管理端點(diǎn)的安全性
當(dāng)啟用安全設(shè)置時(shí),請確保 Spring Boot HTTP管理端點(diǎn)的也啟用了安全設(shè)置 袱贮。您可以application.yml里添加配置來啟用管理端點(diǎn)的安全性:
management: contextPath: /management security:? enabled: true
如果沒有明確地設(shè)置管理端點(diǎn)的安全性仿便,那么就算security.basic.enabled被設(shè)置為true了,REST風(fēng)格的端點(diǎn)也還是不安全的 攒巍。
15. 監(jiān)控和管理
Spring Cloud Data Flow服務(wù)器本身是一個(gè)包括 了Actuator功能庫的Spring Boot應(yīng)用程序嗽仪,它準(zhǔn)備好了一系列的現(xiàn)成功能幫助你監(jiān)控和管理你的應(yīng)用程序 。
Actuator功能庫在路徑/management下添加了HTTP端點(diǎn)柒莉,這也是個(gè)其它可用端點(diǎn)的發(fā)現(xiàn)頁面钦幔。例如,有一個(gè)健康狀態(tài)的端點(diǎn)可以展現(xiàn)應(yīng)用程序 的健康狀態(tài)信息和來自ConfigurableEnvironment的環(huán)境變量列表常柄。默認(rèn)情況下鲤氢,只有健康狀態(tài)和應(yīng)用程序信息的端點(diǎn)是可以訪問的。其它的端點(diǎn)是比較 敏感的 需要 明確通過配置來啟用西潘。如果你需要啟用敏感的端點(diǎn)卷玉,那么你應(yīng)該配置服務(wù)器端點(diǎn)的安全性, 使信息不讓未經(jīng)身份驗(yàn)證的用戶訪問到喷市。本地?cái)?shù)據(jù)流服務(wù)器默認(rèn)情況下已禁用安全設(shè)置相种,所有可用的actuator功能庫的端點(diǎn)是可以訪問的。
數(shù)據(jù)流服務(wù)器如果啟用了分析功能品姓,那么它需要相應(yīng)的關(guān)系數(shù)據(jù)庫和redis服務(wù)器做支撐寝并。數(shù)據(jù)流服務(wù)器會自動(dòng)配置 datasourcehealthindicator 和 redishealthindicator 。這兩種服務(wù)的健康狀態(tài)也納入到服務(wù)器的整體健康狀況腹备,可以通過健康狀態(tài)端點(diǎn)查看衬潦。
15.1. Spring Boot 管理
將actuator端點(diǎn)功能可視化并和它進(jìn)行交互的好方法,是將Spring Boot Admin功能庫集成到Spring Cloud Data Flow服務(wù)器中植酥。您可以通過以下幾個(gè)簡單的步驟 來創(chuàng)建Spring Boot Admin 應(yīng)用程序镀岛。
將Spring Cloud Data Flow服務(wù)器作為Spring Boot Admin服務(wù)器客戶端的方法是, 通過添加一個(gè)依賴到數(shù)據(jù)流服務(wù)器的Maven pom.xml文件中友驮,然后添加額外的配置屬性漂羊。你將需要克隆Spring Cloud Data Flow服務(wù)器的GitHub庫以便修改Maven POM文件 。在GitHub庫中有每個(gè)版本的標(biāo)簽卸留。
添加這種依賴會導(dǎo)致UI界面增加了對應(yīng)每個(gè)actuator端點(diǎn)的標(biāo)簽頁走越。
Spring Boot Admin界面
如果需要與JMX beans和日志記錄進(jìn)行交互,就需要進(jìn)行額外的配置耻瑟≈贾福可以通過Spring Boot admin的文檔獲取更多信息赏酥。因?yàn)?應(yīng)用程序信息 和 健康狀態(tài) 端點(diǎn)是未經(jīng)身份驗(yàn)證的用戶可以直接訪問的,你應(yīng)該啟用數(shù)據(jù)流服務(wù)器的安全性設(shè)置淤毛,同時(shí)配置Spring Boot
Admin 服務(wù)器的安全性今缚,以便能安全地訪問actuator終點(diǎn)。
15.2. 監(jiān)控部署的應(yīng)用程序
Spring Cloud Data Flow部署的應(yīng)用程序基于Spring Boot的低淡,Spring Boot包含了一些用于監(jiān)控應(yīng)用程序的功能特性姓言。每個(gè)部署的應(yīng)用程序中都包含了 監(jiān)測Stream 和Task應(yīng)用程序多個(gè)Web端點(diǎn) 。
值得一提的是蔗蹋,/metrics端點(diǎn)包含一系列的計(jì)數(shù)器和度量何荚,如HTTP請求的, 系統(tǒng)指標(biāo) 的(類似JVM的統(tǒng)計(jì))猪杭, DataSource指標(biāo)的 和 消息通道指標(biāo)的 (如信息速率)餐塘。Spring Boot可以讓你 添加自己的指標(biāo)到/metrics端點(diǎn)下,一種方法是通過注冊publicmetrics 接口的實(shí)現(xiàn)類皂吮,另一種方法是通過集成 dropwizard戒傻。
Spring Boot的MetricWriter和Exporter接口用于發(fā)送數(shù)據(jù)給展現(xiàn)、分析這些數(shù)據(jù)的組件 蜂筹。Spring Boot有輸出指標(biāo)到Redis, Open TSDB, Statsd和JMX的相應(yīng)實(shí)現(xiàn)類需纳,這些實(shí)現(xiàn)類可以直接使用。
還有一些額外的Spring項(xiàng)目提供了將指標(biāo)數(shù)據(jù)發(fā)送到外部系統(tǒng)的功能艺挪。
·Spring Cloud Stream:提供了ApplicationMetricsExporter不翩,用于通過Emitter發(fā)送指標(biāo)數(shù)據(jù)到消息中間件。
·SpringCloud Data Flow Metrics Collector:訂閱指標(biāo)數(shù)據(jù)源和聚合Spring Cloud Stream應(yīng)用程序發(fā)布的指標(biāo)消息 麻裳。它有一個(gè)HTTP端點(diǎn)用于訪問聚合后的指標(biāo)口蝠。
·SpringCloud Data Flow Metrics:提供LogMetricWriter將指標(biāo)數(shù)據(jù)寫入到日志文件當(dāng)中。
·SpringCloud Data Flow Metrics Datadog Metrics:提供DatadogMetricWriter將數(shù)據(jù)寫入到Datadog津坑。
Spring Cloud StreamEmitter提供了創(chuàng)建Stream應(yīng)用時(shí)最常用的應(yīng)用程序妙蔗,它在SpringCloud Stream App Starters項(xiàng)目得到大量使用。
使用Spring Cloud
Stream’sEmitter国瓮,Data Flow
Metrics Collector灭必,和 Data Flow 服務(wù)器時(shí)的體系結(jié)構(gòu)如下所示。
Spring Cloud Data Flow Metrics 體系結(jié)構(gòu)
系統(tǒng)自帶一個(gè)可用于所有支持binder的Spring Boot的指標(biāo)收集器 jar包乃摹。你可以在項(xiàng)目頁面上找到編譯和運(yùn)行指標(biāo)收集器的更多信息。
數(shù)據(jù)流服務(wù)器現(xiàn)在接受 spring.cloud.dataflow.metrics.collector.uri這個(gè)可選的屬性跟衅,這個(gè)屬性指向部署好的指標(biāo)收集器應(yīng)用程序的URI孵睬。例如,如果您運(yùn)行的指標(biāo)收集器在本機(jī)的 8080端口伶跷, 然后可以用以下命令來啟動(dòng)服務(wù)器(本地的例子):
$ java -jar spring-cloud-dataflow-server-local-1.3.0.M2.jar --spring.cloud.dataflow.metrics.collector.uri=http://localhost:8080
指標(biāo)收集器可以通過基于用戶名和密碼的“基本”身份驗(yàn)證來進(jìn)行安全保護(hù)掰读。設(shè)置用戶名和密碼秘狞,使用屬性spring.cloud.dataflow.metrics.collector.username和spring.cloud.dataflow.metrics.collector.password蹈集。
如果需要將每個(gè)應(yīng)用程序的指標(biāo)公布出來烁试, 那么設(shè)置spring.cloud.stream.bindings.applicationMetrics.destination屬性即可。applicationmetrics目的 設(shè)置拢肆。當(dāng)在數(shù)據(jù)流中部署應(yīng)用程序時(shí)减响,可以將其設(shè)置為任何其他應(yīng)用程序的屬性。如果希望stream中的所有應(yīng)用程序都能發(fā)布出指標(biāo)數(shù)據(jù)郭怪,那么可以在數(shù)據(jù)流服務(wù)器級別上設(shè)置它支示。
spring.cloud.dataflow.applicationProperties.stream.spring.cloud.stream.bindings.applicationMetrics.destination=metrics
用metrics這個(gè)名稱作為指標(biāo)發(fā)布名稱是一個(gè)很 不錯(cuò)的選擇,因?yàn)橹笜?biāo)收集器都是默認(rèn)訂閱 這個(gè)發(fā)布名稱的數(shù)據(jù)鄙才。
另一個(gè)常見的配置指標(biāo)名稱的方法是使用部署屬性颂鸿。以下是ticktock
這個(gè)
流應(yīng)用程序的例子,它使用了App Starters當(dāng)中的time和log應(yīng)用程序 攒庵。
app register --name time --type source --uri maven://org.springframework.cloud.stream.app:time-source-rabbit:1.2.0.RELEASEapp register --name log --type sink --uri maven://org.springframework.cloud.stream.app:log-sink-rabbit:1.2.0.RELEASEstream create --name foostream --definition "time | log"stream deploy --name foostream --properties "app.*.spring.cloud.stream.bindings.applicationMetrics.destination=metrics,deployer.*.count=2"
指標(biāo)收集器在HTTP端點(diǎn)/collector/metrics下以JSON格式暴露了聚合后的指標(biāo) 嘴纺。數(shù)據(jù)流服務(wù)器以兩種不同的方式訪問這個(gè)端點(diǎn)。首先是通過暴露一個(gè)/metrics/streamsHTTP端點(diǎn)來代理指標(biāo)收集器的端點(diǎn)浓冒,用戶界面在為每個(gè)流應(yīng)用程序顯示數(shù)據(jù)流圖中的消息處理速率時(shí)栽渴,會調(diào)用這個(gè)暴露的端點(diǎn)。 同時(shí)用戶界面當(dāng)中的Runtime 標(biāo)簽頁暴露的/runtime/apps端點(diǎn)本身和shell 當(dāng)中的用于顯示消息處理速率的runtime
apps命令
也都會調(diào)用這個(gè)端點(diǎn) 裆蒸。
數(shù)據(jù)流的消息處理速率
默認(rèn)情況下熔萧,數(shù)據(jù)流會設(shè)置下邊這個(gè)屬性的值
spring.cloud.stream.metrics.properties=spring.application.name,spring.application.index,spring.cloud.application.*,spring.cloud.dataflow.*
如果這些應(yīng)用程序的屬性值列表是需要進(jìn)行聚合的,它也會同時(shí)設(shè)置下邊這個(gè)屬性僚祷。
spring.metrics.export.triggers.application.includes=integration**`
由于數(shù)據(jù)流只顯示瞬時(shí)輸入和輸出通道消息速率佛致。默認(rèn)情況下,所有在/metric端點(diǎn)下的指標(biāo)值都是發(fā)送相關(guān)的辙谜,這會降低消息的有效負(fù)載統(tǒng)計(jì)俺榆,但不影響功能。當(dāng)需要展現(xiàn)這些指標(biāo)值時(shí)(用于跟蹤特定應(yīng)用程序)装哆,數(shù)據(jù)流也暴露出 GUID這個(gè) 屬性罐脊,這個(gè) GUID屬性,它的 值是平臺相關(guān)的蜕琴。
注意萍桌,您可以通過設(shè)置來重寫這些默認(rèn)值,就像任何應(yīng)用程序的屬性值一樣凌简。
數(shù)據(jù)流不會提供它自己實(shí)現(xiàn)的功能來存儲和可視化歷史指標(biāo)數(shù)據(jù)上炎。我們將通過提供一個(gè)導(dǎo)出器應(yīng)用程序來集成現(xiàn)有的ALM系統(tǒng),該應(yīng)用程序會處理那些與指標(biāo)收集器同樣來源的消息雏搂,并將它們寫入到現(xiàn)有的ALM系統(tǒng)中藕施。我們支持哪個(gè)特定的ALM系統(tǒng)是由用戶需求來驅(qū)動(dòng)的寇损。作為例子,我們將開發(fā)一個(gè)結(jié)合了開源的Grafana前端的Elastic Search導(dǎo)出器 裳食。
15.3. 日志和DataDog 指標(biāo)器(MetricWriter)
如果你希望部署的應(yīng)用程序繞過指標(biāo)收集器提供的集中式指標(biāo)列表矛市,你可以使用SpringCloud Data Flow Metrics和SpringCloud Data Flow Metrics Datadog Metrics當(dāng)中的指標(biāo)寫入器 。
數(shù)據(jù)流Metrics項(xiàng)目通過MetricWriters為Spring Boot指標(biāo)的輸出提供了基礎(chǔ)诲祸。它提供了Spring Boots AutoConfiguration來設(shè)置寫入過程和常用功能浊吏,如定義一個(gè)更適合當(dāng)前環(huán)境的有特定名稱前綴的指標(biāo)名稱。例如烦绳,指標(biāo)名稱除了包含應(yīng)用程序的名稱和它所屬的流/任務(wù)名稱外卿捎,你可能還希望名稱當(dāng)中包含應(yīng)用程序正在運(yùn)行的區(qū)域名稱 。同時(shí)項(xiàng)目還包括了logmetricwriter功能類径密,可以將指標(biāo)存儲到日志文件中午阵。日志文件通常被應(yīng)用監(jiān)控工具所利用(如Splunk),在那里日志可以被進(jìn)一步處理享扔,用于創(chuàng)建應(yīng)用程序的性能儀表板底桂。
要利用此功能,您需要在您的流和任務(wù)應(yīng)用程序中添加額外的依賴項(xiàng)惧眠。你可以使用Data Flow Initializr來可以定制自己任務(wù)流的應(yīng)用程序籽懦,用它來先生成項(xiàng)目,然后添加你需要使用的MetricWriter實(shí)現(xiàn)類到生成的maven pom文件中氛魁。數(shù)據(jù)流Metrics項(xiàng)目頁面上的文檔提供了更多你所需的相關(guān)信息暮顺。