ELK堆栈入门
朋友不允許朋友寫用戶身份驗證。 厭倦了管理自己的用戶? 立即嘗試Okta的API和Java SDK。 在幾分鐘之內(nèi)即可對任何應(yīng)用程序中的用戶進(jìn)行身份驗證,管理和保護(hù)。
好的設(shè)計原則要求微服務(wù)架構(gòu)是可觀察的,并提供集中的監(jiān)視工具。 該工具使開發(fā)團(tuán)隊可以驗證整個系統(tǒng)的運行狀況,檢查日志和錯誤以及在部署后獲取反饋。 那么什么是彈性(或ELK)堆棧?為什么它是滿足此需求的絕佳選擇?
在本教程中,您將學(xué)習(xí)如何...
- 在Docker容器中設(shè)置并運行ELK堆棧
- 設(shè)置JHipster控制臺以監(jiān)視微服務(wù)基礎(chǔ)架構(gòu)
- 使用JHipster創(chuàng)建微服務(wù)架構(gòu)
- 使用JHipster控制臺啟用監(jiān)視
- 為微服務(wù)配置OpenID Connect身份驗證
彈性堆棧的演變
首字母縮寫詞ELK代表Elasticsearch,Logstash和Kibana ,這三個開源項目構(gòu)成了功能強大的堆棧,用于日志攝取和可視化,日志搜索,事件分析以及用于監(jiān)視應(yīng)用程序的有用的可視化指標(biāo)。
E lasticsearch是堆棧的核心:一個基于JSON的搜索和分析引擎,可分布式且可擴(kuò)展。 它基于Apache Lucene構(gòu)建,并提供JSON REST API,集群管理,高可用性和容錯能力。
L ogstash是一種ETL(提取,轉(zhuǎn)換,加載)工具,用于豐富文檔,運行數(shù)據(jù)處理管道。 這些管道從多個來源獲取數(shù)據(jù),進(jìn)行轉(zhuǎn)換并將其發(fā)送到Elasticsearch。
K ibana提供可視化前端,這是進(jìn)入Elastic Stack的窗口。 借助儀表板和可視化元素,可以瀏覽,匯總和分析存儲在Elasticsearch中的數(shù)據(jù)。
從版本7開始,ELK堆棧被重命名為Elastic Stack ,并將Beats添加到堆棧中。 Beats是與Elasticsearch和Logstash一起使用的輕量級數(shù)據(jù)托運人系列。
設(shè)置彈性堆棧
Elastic發(fā)布了Docker Compose配置 ,以演示單臺計算機上的堆棧組件。 安裝Docker和Docker Compose并按照以下步驟啟動堆棧:
Windows用戶必須配置2個環(huán)境變量,查看堆棧docker github存儲庫上的說明
至少為容器提供4GB的RAM,并查看有關(guān)您的環(huán)境的說明
- 克隆stack-docker存儲庫
- 使用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- 啟動堆棧
在前臺啟動堆棧以查看容器日志:
docker-compose up當(dāng)您看到Kibana記錄了Beats家族發(fā)送的對健康檢查請求的響應(yīng),并且您在日志中看到至少一個心跳條目時,可以嘗試登錄(下面的步驟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}}}}}} 您可能會在日志輸出中注意到異常。 對于此演示,可以安全地忽略它們。 如果遇到docker問題,可以重新開始:
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。
登錄后(使用彈性用戶和您在上面捕獲的密碼),通過左側(cè)菜單從“儀表板”部分中瀏覽已安裝的儀表板。 心跳是Beat服務(wù)之一,可從提供的URL列表中監(jiān)視您的服務(wù)正常運行時間。 打開儀表板Heartbeat HTTP監(jiān)視,并查看堆棧的功能以進(jìn)行數(shù)據(jù)可視化。
JHipster控制臺
Jhipster控制臺是基于Elastic Stack的出色監(jiān)控解決方案,可隨著時間的推移可視化和分析JHipster應(yīng)用程序指標(biāo)。 控制臺提供了預(yù)配置的儀表板,以監(jiān)視微服務(wù)基礎(chǔ)架構(gòu)。 您可以在JHipster Console的文檔中查看功能的完整列表。
從JHipster控制臺啟動的一種更簡單的方法是部署應(yīng)用程序,并使用docker -compose子生成器啟用監(jiān)視。 您將使用它來:
- 使用JHipster創(chuàng)建微服務(wù)架構(gòu)
- 使用JHipster控制臺啟用監(jiān)視
- 配置OpenID Connect以對微服務(wù)進(jìn)行身份驗證
使用JHipster創(chuàng)建Java微服務(wù)架構(gòu)
要安裝一個版本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為項目創(chuàng)建目錄:
mkdir jhipster cd jhipster創(chuàng)建apps.jh以使用JHipster域語言(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文件夾中,運行import-jdl generator 。
jhipster import-jdl apps.jh使用
在項目文件夾中,為docker-compose配置創(chuàng)建一個子文件夾,然后運行該子生成器。
mkdir docker-compose cd docker-compose jhipster docker-compose生成器將要求您定義以下配置:
您可以在下面的記錄中查看其工作原理。
當(dāng)發(fā)電機快要用完時,輸出中將顯示警告:
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您可以按照上述說明創(chuàng)建微服務(wù)映像,或創(chuàng)建聚合器pom.xml并僅使用一個命令來構(gòu)建所有映像,如我們在Java微服務(wù)上的文章中所述。
為微服務(wù)設(shè)置Okta OpenID Connect(OIDC)身份驗證
默認(rèn)情況下,微服務(wù)架構(gòu)通過Keycloak進(jìn)行身份驗證。 更新設(shè)置以將Okta用作身份驗證提供程序:
首先,前往Okta以獲得免費的開發(fā)者帳戶 。
登錄后,點擊您的單位 ,它將帶您進(jìn)入開發(fā)者控制臺 。 轉(zhuǎn)到“ 應(yīng)用程序”部分,并添加一個新的Web應(yīng)用程序 。 設(shè)置以下身份驗證設(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)碼和刷新令牌
為簡單起見,本教程僅創(chuàng)建Web App,并且其憑據(jù)將用于所有服務(wù)。 在實際環(huán)境中,每個服務(wù)必須使用其自己的憑據(jù)進(jìn)行標(biāo)識,并且您應(yīng)該在Okta控制臺中為每個服務(wù)創(chuàng)建一個Web應(yīng)用程序或服務(wù)。
復(fù)制Client ID和Client secret ,因為我們將使用它來進(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注冊表設(shè)置相同的身份驗證。 編輯docker-compose/jhipster-registry.yml并設(shè)置與gateway-app的environment部分相同的值。
JHipster應(yīng)用程序需要特定的用戶角色ROLE_USER和ROLE_ADMIN作為ID令牌中的聲明。 在Okta開發(fā)人員控制臺中,轉(zhuǎn)到“ 用戶” >“ 組”,并為每個JHipster角色創(chuàng)建一個組,然后將用戶添加到每個組。
現(xiàn)在轉(zhuǎn)到“ API” >“ 授權(quán)服務(wù)器” ,選擇默認(rèn)服務(wù)器,然后使用以下設(shè)置添加“聲明 ”:
啟用調(diào)試日志和Zipkin
要將調(diào)試日志發(fā)送到JHipster控制臺,讓我們更新prod配置文件中的日志級別。 編輯src/main/resources/config/application-prod.yml以將com.okta.developer.*記錄器的每個服務(wù)( blog-app , store-app和gateway-app )的級別設(shè)置為DEBUG 。 例如,在博客的application-prod.yml :
logging:level:com.okta.developer.blog: DEBUG另外,對于每個服務(wù),更新產(chǎn)品概要文件處于活動狀態(tài)時要加載的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是一個分布式跟蹤系統(tǒng),可幫助解決微服務(wù)體系結(jié)構(gòu)中的延遲問題。 通過在服務(wù)之間傳播traceId,可以將對不同服務(wù)的調(diào)用進(jìn)行關(guān)聯(lián)并作為同一流的一部分進(jìn)行分析。 JHipster控制臺提供了Zipkin服務(wù)器和UI,并且JHipster應(yīng)用程序可以通過Spring Cloud Sleuth與Zipkin集成。 要啟用Zipkin跟蹤,請將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)建每個項目:
for i in blog gateway store do cd $i ./mvnw package -Pprod -Pzipkin verify jib:dockerBuild -DskipTests cd .. done
運行受監(jiān)視的微服務(wù)架構(gòu)
您準(zhǔn)備好了嗎? 轉(zhuǎn)到docker-compose文件夾,并使用以下命令啟動服務(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注冊表,并檢查服務(wù)的運行狀況。
所有服務(wù)啟動后,登錄到網(wǎng)關(guān)應(yīng)用程序并創(chuàng)建一些博客和帖子以產(chǎn)生流量。 為此,請使用應(yīng)用程序左上方的“ 實體”菜單。 網(wǎng)關(guān)的主頁位于http://localhost:8080 。
有趣的部分! 通過http://localhost:5601訪問JHipster控制臺。 轉(zhuǎn)到“儀表板”部分,然后打開“ requests-dashboard” 。 您應(yīng)該會看到一些漂亮的曲線:
由于您將JHipster控制臺與Zipkin UI集成在一起,因此在traces-dashboard中,您可以在左側(cè)找到最長的跟蹤持續(xù)時間。 如果單擊右側(cè)的traceId,它將在UI中打開跟蹤,您將能夠檢查流。
了解有關(guān)JHipster和Elastic Stack的更多信息
我希望您喜歡本教程以及Elastic Stack和JHipster Console用于監(jiān)視微服務(wù)架構(gòu)的功能。 要繼續(xù)擴(kuò)展您對JHipster監(jiān)控和Okta與Elastic Stack集成的知識,請查看以下鏈接:
- Github上的JHipster控制臺
- JHipster監(jiān)視文檔
- SAML身份驗證和彈性堆棧
- Kibana中的身份驗證
如果您喜歡這篇文章,那么您很可能會喜歡我們在JHipster和微服務(wù)上的其他文章:
- 帶有Java 12和JHipster 6的更好,更快,更輕量的Java
- 通過Java Hipster升級Spring Security OAuth和JUnit測試
- 帶有Spring Boot和Spring Cloud的Java微服務(wù)
- 帶有Spring Cloud Config和JHipster的Java微服務(wù)
- 使用Spring Cloud Gateway保護(hù)反應(yīng)式微服務(wù)
要在我們發(fā)布新帖子時得到通知, 請在Twitter上關(guān)注@oktadev 。 我們還會定期將截屏視頻發(fā)布到我們的YouTube頻道 。
ELK堆棧入門最初于2019年9月26日發(fā)布在Okta開發(fā)者博客上。
朋友不允許朋友寫用戶身份驗證。 厭倦了管理自己的用戶? 立即嘗試Okta的API和Java SDK。 在幾分鐘之內(nèi)即可對任何應(yīng)用程序中的用戶進(jìn)行身份驗證,管理和保護(hù)。
翻譯自: https://www.javacodegeeks.com/2019/10/get-started-with-the-elk-stack.html
總結(jié)
- 上一篇: 霍廷格对阿维克斯-势均力敌,但只有一名胜
- 下一篇: 在Kafka上异步发送数据