ELK堆栈入门
朋友不允許朋友寫用戶身份驗(yàn)證。 厭倦了管理自己的用戶? 立即嘗試Okta的API和Java SDK。 在幾分鐘之內(nèi)即可對(duì)任何應(yīng)用程序中的用戶進(jìn)行身份驗(yàn)證,管理和保護(hù)。
好的設(shè)計(jì)原則要求微服務(wù)架構(gòu)是可觀察的,并提供集中的監(jiān)視工具。 該工具使開(kāi)發(fā)團(tuán)隊(duì)可以驗(yàn)證整個(gè)系統(tǒng)的運(yùn)行狀況,檢查日志和錯(cuò)誤以及在部署后獲取反饋。 那么什么是彈性(或ELK)堆棧?為什么它是滿足此需求的絕佳選擇?
在本教程中,您將學(xué)習(xí)如何...
- 在Docker容器中設(shè)置并運(yùn)行ELK堆棧
- 設(shè)置JHipster控制臺(tái)以監(jiān)視微服務(wù)基礎(chǔ)架構(gòu)
- 使用JHipster創(chuàng)建微服務(wù)架構(gòu)
- 使用JHipster控制臺(tái)啟用監(jiān)視
- 為微服務(wù)配置OpenID Connect身份驗(yàn)證
彈性堆棧的演變
首字母縮寫詞ELK代表Elasticsearch,Logstash和Kibana ,這三個(gè)開(kāi)源項(xiàng)目構(gòu)成了功能強(qiáng)大的堆棧,用于日志攝取和可視化,日志搜索,事件分析以及用于監(jiān)視應(yīng)用程序的有用的可視化指標(biāo)。
E lasticsearch是堆棧的核心:一個(gè)基于JSON的搜索和分析引擎,可分布式且可擴(kuò)展。 它基于Apache Lucene構(gòu)建,并提供JSON REST API,集群管理,高可用性和容錯(cuò)能力。
L ogstash是一種ETL(提取,轉(zhuǎn)換,加載)工具,用于豐富文檔,運(yùn)行數(shù)據(jù)處理管道。 這些管道從多個(gè)來(lái)源獲取數(shù)據(jù),進(jìn)行轉(zhuǎn)換并將其發(fā)送到Elasticsearch。
K ibana提供可視化前端,這是進(jìn)入Elastic Stack的窗口。 借助儀表板和可視化元素,可以瀏覽,匯總和分析存儲(chǔ)在Elasticsearch中的數(shù)據(jù)。
從版本7開(kāi)始,ELK堆棧被重命名為Elastic Stack ,并將Beats添加到堆棧中。 Beats是與Elasticsearch和Logstash一起使用的輕量級(jí)數(shù)據(jù)托運(yùn)人系列。
設(shè)置彈性堆棧
Elastic發(fā)布了Docker Compose配置 ,以演示單臺(tái)計(jì)算機(jī)上的堆棧組件。 安裝Docker和Docker Compose并按照以下步驟啟動(dòng)堆棧:
Windows用戶必須配置2個(gè)環(huán)境變量,查看堆棧docker github存儲(chǔ)庫(kù)上的說(shuō)明
至少為容器提供4GB的RAM,并查看有關(guān)您的環(huán)境的說(shuō)明
- 克隆stack-docker存儲(chǔ)庫(kù)
- 使用Docker Compose設(shè)置堆棧
設(shè)置完成后,它將輸出彈性用戶的密碼 。 如果連接速度較慢,則最多可能需要20分鐘。 完成后,您將看到以下日志:
setup_1 | Setup completed successfully. To start the stack please run:setup_1 | docker-compose up -dsetup_1 |setup_1 | If you wish to remove the setup containers please run:setup_1 | docker-compose -f docker-compose.yml -f docker-compose.setup.yml down --remove-orphanssetup_1 |setup_1 | You will have to re-start the stack after removing setup containers.setup_1 |setup_1 | Your 'elastic' user password is: Z8GFVXu9UVsBrM6nup5fHw==stack-docker_setup_1 exited with code 0- 啟動(dòng)堆棧
在前臺(tái)啟動(dòng)堆棧以查看容器日志:
docker-compose up當(dāng)您看到Kibana記錄了Beats家族發(fā)送的對(duì)健康檢查請(qǐng)求的響應(yīng),并且您在日志中看到至少一個(gè)心跳條目時(shí),可以嘗試登錄(下面的步驟4):
kibana | {"type":"response","@timestamp":"2019-09-23T20:38:47Z","tags":[],"pid":1,"method":"get","statusCode":200,"req":{"url":"/login?next=%2F","method":"get","headers":{"host":"kibana:5601","user-agent":"Go-http-client/1.1","referer":"http://kibana:5601"},"remoteAddress":"172.25.0.9","userAgent":"172.25.0.9","referer":"http://kibana:5601"},"res":{"statusCode":200,"responseTime":30,"contentLength":9},"message":"GET /login?next=%2F 200 30ms - 9.0B"}...heartbeat | 2019-09-23T20:38:52.213Z INFO [monitoring] log/log.go:144 Non-zero metrics in the last 30s {"monitoring": {"metrics": {"beat":{"cpu":{"system":{"ticks":160,"time":{"ms":50}},"total":{"ticks":430,"time":{"ms":120},"value":430},"user":{"ticks":270,"time":{"ms":70}}},"handles":{"limit":{"hard":1048576,"soft":1048576},"open":9},"info":{"ephemeral_id":"d8d4f6a2-39fa-41cb-9e9c-520438d49a9e","uptime":{"ms":93132}},"memstats":{"gc_next":4194304,"memory_alloc":3365792,"memory_total":12191384,"rss":327680}},"libbeat":{"config":{"module":{"running":0}},"output":{"events":{"acked":24,"batches":6,"total":24},"read":{"bytes":5970},"write":{"bytes":16878}},"pipeline":{"clients":4,"events":{"active":0,"published":24,"total":24},"queue":{"acked":24}}},"system":{"load":{"1":4.83,"15":2.43,"5":3.44,"norm":{"1":1.2075,"15":0.6075,"5":0.86}}}}}} 您可能會(huì)在日志輸出中注意到異常。 對(duì)于此演示,可以安全地忽略它們。 如果遇到docker問(wèn)題,可以重新開(kāi)始:
docker container ls -a | cut -c1-12 | xargs docker container rm --force docker images | cut -c69-80 | xargs docker rmi docker system prune -a
注意:這將銷毀所有docker容器,圖像和網(wǎng)絡(luò),因此使用后果自負(fù)。
- 轉(zhuǎn)到http:// localhost:5601登錄到Kibana。
登錄后(使用彈性用戶和您在上面捕獲的密碼),通過(guò)左側(cè)菜單從“儀表板”部分中瀏覽已安裝的儀表板。 心跳是Beat服務(wù)之一,可從提供的URL列表中監(jiān)視您的服務(wù)正常運(yùn)行時(shí)間。 打開(kāi)儀表板Heartbeat HTTP監(jiān)視,并查看堆棧的功能以進(jìn)行數(shù)據(jù)可視化。
JHipster控制臺(tái)
Jhipster控制臺(tái)是基于Elastic Stack的出色監(jiān)控解決方案,可隨著時(shí)間的推移可視化和分析JHipster應(yīng)用程序指標(biāo)。 控制臺(tái)提供了預(yù)配置的儀表板,以監(jiān)視微服務(wù)基礎(chǔ)架構(gòu)。 您可以在JHipster Console的文檔中查看功能的完整列表。
從JHipster控制臺(tái)啟動(dòng)的一種更簡(jiǎn)單的方法是部署應(yīng)用程序,并使用docker -compose子生成器啟用監(jiān)視。 您將使用它來(lái):
- 使用JHipster創(chuàng)建微服務(wù)架構(gòu)
- 使用JHipster控制臺(tái)啟用監(jiān)視
- 配置OpenID Connect以對(duì)微服務(wù)進(jìn)行身份驗(yàn)證
使用JHipster創(chuàng)建Java微服務(wù)架構(gòu)
要安裝一個(gè)版本JHipster的,將在這里工作,你需要安裝Node.js的 。
安裝JHipster
npm install -g generator-jhipster@6.3.1 jhipster --version版本命令應(yīng)輸出如下內(nèi)容:
INFO! Using JHipster version installed globally 6.3.1為項(xiàng)目創(chuàng)建目錄:
mkdir jhipster cd jhipster創(chuàng)建apps.jh以使用JHipster域語(yǔ)言(JDL)定義商店,博客和網(wǎng)關(guān)微服務(wù)。 我們將重新創(chuàng)建本教程之前構(gòu)建的基于Java的微服務(wù)架構(gòu)示例。
application {config {baseName gateway,packageName com.okta.developer.gateway,applicationType gateway,authenticationType oauth2,prodDatabaseType postgresql,serviceDiscoveryType eureka,testFrameworks [protractor]}entities Blog, Post, Tag, Product }application {config {baseName blog,packageName com.okta.developer.blog,applicationType microservice,authenticationType oauth2,prodDatabaseType postgresql,serverPort 8081,serviceDiscoveryType eureka}entities Blog, Post, Tag }application {config {baseName store,packageName com.okta.developer.store,applicationType microservice,authenticationType oauth2,databaseType mongodb,devDatabaseType mongodb,prodDatabaseType mongodb,enableHibernateCache false,serverPort 8082,serviceDiscoveryType eureka}entities Product }entity Blog {name String required minlength(3),handle String required minlength(2) }entity Post {title String required,content TextBlob required,date Instant required }entity Tag {name String required minlength(2) }entity Product {title String required,price BigDecimal required min(0),image ImageBlob }relationship ManyToOne {Blog{user(login)} to User,Post{blog(name)} to Blog }relationship ManyToMany {Post{tag(name)} to Tag{post} }paginate Post, Tag with infinite-scroll paginate Product with paginationmicroservice Product with store microservice Blog, Post, Tag with blog現(xiàn)在,在您的jhipster文件夾中,運(yùn)行import-jdl generator 。
jhipster import-jdl apps.jh使用
在項(xiàng)目文件夾中,為docker-compose配置創(chuàng)建一個(gè)子文件夾,然后運(yùn)行該子生成器。
mkdir docker-compose cd docker-compose jhipster docker-compose生成器將要求您定義以下配置:
您可以在下面的記錄中查看其工作原理。
當(dāng)發(fā)電機(jī)快要用完時(shí),輸出中將顯示警告:
WARNING! Docker Compose configuration generated, but no Jib cache found If you forgot to generate the Docker image for this application, please run: To generate the missing Docker image(s), please run:./mvnw package -Pprod verify jib:dockerBuild in /home/indiepopart/jhipster/blog./mvnw package -Pprod verify jib:dockerBuild in /home/indiepopart/jhipster/gateway./mvnw package -Pprod verify jib:dockerBuild in /home/indiepopart/jhipster/store您可以按照上述說(shuō)明創(chuàng)建微服務(wù)映像,或創(chuàng)建聚合器pom.xml并僅使用一個(gè)命令來(lái)構(gòu)建所有映像,如我們?cè)贘ava微服務(wù)上的文章中所述。
為微服務(wù)設(shè)置Okta OpenID Connect(OIDC)身份驗(yàn)證
默認(rèn)情況下,微服務(wù)架構(gòu)通過(guò)Keycloak進(jìn)行身份驗(yàn)證。 更新設(shè)置以將Okta用作身份驗(yàn)證提供程序:
首先,前往Okta以獲得免費(fèi)的開(kāi)發(fā)者帳戶 。
登錄后,點(diǎn)擊您的單位 ,它將帶您進(jìn)入開(kāi)發(fā)者控制臺(tái) 。 轉(zhuǎn)到“ 應(yīng)用程序”部分,并添加一個(gè)新的Web應(yīng)用程序 。 設(shè)置以下身份驗(yàn)證設(shè)置:
- 名稱:為您的應(yīng)用程序命名
- 基本URI: http://localhost:8761和http://localhost:8080
- 登錄重定向URI: http://localhost:8080/login/oauth2/code/oidc和http://localhost:8761/login/oauth2/code/oidc
- 允許的授予類型:授權(quán)碼和刷新令牌
為簡(jiǎn)單起見(jiàn),本教程僅創(chuàng)建Web App,并且其憑據(jù)將用于所有服務(wù)。 在實(shí)際環(huán)境中,每個(gè)服務(wù)必須使用其自己的憑據(jù)進(jìn)行標(biāo)識(shí),并且您應(yīng)該在Okta控制臺(tái)中為每個(gè)服務(wù)創(chuàng)建一個(gè)Web應(yīng)用程序或服務(wù)。
復(fù)制Client ID和Client secret ,因?yàn)槲覀儗⑹褂盟鼇?lái)進(jìn)行應(yīng)用程序的設(shè)置。 在Okta信息中心的右上角找到組織URL 。
創(chuàng)建具有以下內(nèi)容的docker-compose/.env文件:
OIDC_CLIENT_ID=<client_id> OIDC_CLIENT_SECRET=<client_secret> RESOURCE_ISSUER_URI=<org_url>/oauth2/default編輯docker-compose/docker-compose.yml并更新服務(wù)blog-app , gateway-app和store-app的SECURITY_*設(shè)置:
SPRING_SECURITY_OAUTH2_CLIENT_PROVIDER_OIDC_ISSUER_URI=${RESOURCE_ISSUER_URI} SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_OIDC_CLIENT_ID=${OIDC_CLIENT_ID} SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_OIDC_CLIENT_SECRET=${OIDC_CLIENT_SECRET}必須為JHipster注冊(cè)表設(shè)置相同的身份驗(yàn)證。 編輯docker-compose/jhipster-registry.yml并設(shè)置與gateway-app的environment部分相同的值。
JHipster應(yīng)用程序需要特定的用戶角色ROLE_USER和ROLE_ADMIN作為ID令牌中的聲明。 在Okta開(kāi)發(fā)人員控制臺(tái)中,轉(zhuǎn)到“ 用戶” >“ 組”,并為每個(gè)JHipster角色創(chuàng)建一個(gè)組,然后將用戶添加到每個(gè)組。
現(xiàn)在轉(zhuǎn)到“ API” >“ 授權(quán)服務(wù)器” ,選擇默認(rèn)服務(wù)器,然后使用以下設(shè)置添加“聲明 ”:
啟用調(diào)試日志和Zipkin
要將調(diào)試日志發(fā)送到JHipster控制臺(tái),讓我們更新prod配置文件中的日志級(jí)別。 編輯src/main/resources/config/application-prod.yml以將com.okta.developer.*記錄器的每個(gè)服務(wù)( blog-app , store-app和gateway-app )的級(jí)別設(shè)置為DEBUG 。 例如,在博客的application-prod.yml :
logging:level:com.okta.developer.blog: DEBUG另外,對(duì)于每個(gè)服務(wù),更新產(chǎn)品概要文件處于活動(dòng)狀態(tài)時(shí)要加載的LoggingAspectConfiguration 。 更改@Profile批注:
@Configuration @EnableAspectJAutoProxy public class LoggingAspectConfiguration {@Bean@Profile({JHipsterConstants.SPRING_PROFILE_DEVELOPMENT, JHipsterConstants.SPRING_PROFILE_PRODUCTION})public LoggingAspect loggingAspect(Environment env) {return new LoggingAspect(env);} }Zipkin是一個(gè)分布式跟蹤系統(tǒng),可幫助解決微服務(wù)體系結(jié)構(gòu)中的延遲問(wèn)題。 通過(guò)在服務(wù)之間傳播traceId,可以將對(duì)不同服務(wù)的調(diào)用進(jìn)行關(guān)聯(lián)并作為同一流的一部分進(jìn)行分析。 JHipster控制臺(tái)提供了Zipkin服務(wù)器和UI,并且JHipster應(yīng)用程序可以通過(guò)Spring Cloud Sleuth與Zipkin集成。 要啟用Zipkin跟蹤,請(qǐng)將zipkin配置文件添加到zipkin docker-compose/docker-compose.yml blog-app , gateway-app和store-app 。
- SPRING_PROFILES_ACTIVE=prod,swagger,zipkin您還需要使用以下Maven命令使用zipkin配置文件為blog-app , store-app和gateway-app重建Docker映像:
./mvnw package -Pprod -Pzipkin verify jib:dockerBuild -DskipTests ProTip:如果您使用的是具有bash shell的系統(tǒng)(例如Linux或MacOs),則可以從jhipster文件夾執(zhí)行此操作,以一次構(gòu)建每個(gè)項(xiàng)目:
for i in blog gateway store do cd $i ./mvnw package -Pprod -Pzipkin verify jib:dockerBuild -DskipTests cd .. done
運(yùn)行受監(jiān)視的微服務(wù)架構(gòu)
您準(zhǔn)備好了嗎? 轉(zhuǎn)到docker-compose文件夾,并使用以下命令啟動(dòng)服務(wù):
docker-compose upjhipster-registry_1 | ---------------------------------------------------------- jhipster-registry_1 | Application 'jhipster-registry' is running! Access URLs: jhipster-registry_1 | Local: http://localhost:8761 jhipster-registry_1 | External: http://172.20.0.2:8761 jhipster-registry_1 | Profile(s): [composite, dev, swagger, oauth2] jhipster-registry_1 | ----------------------------------------------------------使用Okta用戶憑據(jù)登錄到http://localhost:8761的JHipster注冊(cè)表,并檢查服務(wù)的運(yùn)行狀況。
所有服務(wù)啟動(dòng)后,登錄到網(wǎng)關(guān)應(yīng)用程序并創(chuàng)建一些博客和帖子以產(chǎn)生流量。 為此,請(qǐng)使用應(yīng)用程序左上方的“ 實(shí)體”菜單。 網(wǎng)關(guān)的主頁(yè)位于http://localhost:8080 。
有趣的部分! 通過(guò)http://localhost:5601訪問(wèn)JHipster控制臺(tái)。 轉(zhuǎn)到“儀表板”部分,然后打開(kāi)“ requests-dashboard” 。 您應(yīng)該會(huì)看到一些漂亮的曲線:
由于您將JHipster控制臺(tái)與Zipkin UI集成在一起,因此在traces-dashboard中,您可以在左側(cè)找到最長(zhǎng)的跟蹤持續(xù)時(shí)間。 如果單擊右側(cè)的traceId,它將在UI中打開(kāi)跟蹤,您將能夠檢查流。
了解有關(guān)JHipster和Elastic Stack的更多信息
我希望您喜歡本教程以及Elastic Stack和JHipster Console用于監(jiān)視微服務(wù)架構(gòu)的功能。 要繼續(xù)擴(kuò)展您對(duì)JHipster監(jiān)控和Okta與Elastic Stack集成的知識(shí),請(qǐng)查看以下鏈接:
- Github上的JHipster控制臺(tái)
- JHipster監(jiān)視文檔
- SAML身份驗(yàn)證和彈性堆棧
- Kibana中的身份驗(yàn)證
如果您喜歡這篇文章,那么您很可能會(huì)喜歡我們?cè)贘Hipster和微服務(wù)上的其他文章:
- 帶有Java 12和JHipster 6的更好,更快,更輕量的Java
- 通過(guò)Java Hipster升級(jí)Spring Security OAuth和JUnit測(cè)試
- 帶有Spring Boot和Spring Cloud的Java微服務(wù)
- 帶有Spring Cloud Config和JHipster的Java微服務(wù)
- 使用Spring Cloud Gateway保護(hù)反應(yīng)式微服務(wù)
要在我們發(fā)布新帖子時(shí)得到通知, 請(qǐng)?jiān)赥witter上關(guān)注@oktadev 。 我們還會(huì)定期將截屏視頻發(fā)布到我們的YouTube頻道 。
ELK堆棧入門最初于2019年9月26日發(fā)布在Okta開(kāi)發(fā)者博客上。
朋友不允許朋友寫用戶身份驗(yàn)證。 厭倦了管理自己的用戶? 立即嘗試Okta的API和Java SDK。 在幾分鐘之內(nèi)即可對(duì)任何應(yīng)用程序中的用戶進(jìn)行身份驗(yàn)證,管理和保護(hù)。
翻譯自: https://www.javacodegeeks.com/2019/10/get-started-with-the-elk-stack.html
總結(jié)
- 上一篇: 霍廷格对阿维克斯-势均力敌,但只有一名胜
- 下一篇: H5画布