elk入门_ELK堆栈入门

短命女 2023-02-25 05:56 64阅读 0赞

elk入门

朋友不允许朋友写用户身份验证。 厌倦了管理自己的用户? 立即尝试Okta的API和Java SDK。 数分钟之内即可在任何应用程序中对用户进行身份验证,管理和保护。

好的设计原则要求微服务架构是可观察的,并提供集中的监视工具。 该工具使开发团队可以验证整个系统的运行状况,检查日志和错误以及在部署后获取反馈。 那么什么是弹性(或ELK)堆栈,为什么它是满足此需求的绝佳选择?

在本教程中,您将学习如何…

  • 在Docker容器中设置并运行ELK堆栈
  • 设置JHipster控制台以监视微服务基础架构
  • 使用JHipster创建微服务架构
  • 使用JHipster控制台启用监视
  • 为微服务配置OpenID Connect身份验证

弹性堆栈的演变

首字母缩写词ELK代表Elasticsearch,Logstash和Kibana ,这三个开源项目构成了功能强大的堆栈,用于日志摄取和可视化,日志搜索,事件分析以及用于监视应用程序的有用的可视化指标。

*E lasticsearch*是堆栈的核心:一个基于JSON的搜索和分析引擎,可分布式且可扩展。 它基于Apache Lucene构建,并提供JSON REST API,集群管理,高可用性和容错能力。

*L ogstash*是一种ETL(提取,转换,加载)工具,用于丰富文档,运行数据处理管道。 这些管道从多个来源获取数据,进行转换并将其发送到Elasticsearch。

*K ibana*提供可视化前端,这是进入Elastic Stack的窗口。 借助仪表板和可视化元素,可以浏览,汇总和分析Elasticsearch中存储的数据。

从版本7开始,ELK堆栈被重命名为Elastic Stack ,并将Beats添加到堆栈中。 Beats是与Elasticsearch和Logstash一起使用的轻量级数据托运人系列。

设置弹性堆栈

Elastic发布了Docker Compose配置 ,以演示单台计算机上的堆栈组件。 安装Docker和Docker Compose并按照以下步骤启动堆栈:

Windows用户必须配置2个环境变量,查看堆栈docker github存储库上的说明
至少为容器提供4GB的RAM,并查看有关您的环境的说明

  • 克隆stack-docker存储库

    git clone https://github.com/elastic/stack-docker.git

  • 使用Docker Compose设置堆栈

    cd stack-docker
    docker-compose -f setup.yml up

设置完成后,它将输出弹性用户的密码 。 如果连接速度较慢,则最多可能需要20分钟。 完成后,您将看到以下日志:

  1. setup_1 | Setup completed successfully. To start the stack please run:
  2. setup_1 | docker-compose up -d
  3. setup_1 |
  4. setup_1 | If you wish to remove the setup containers please run:
  5. setup_1 | docker-compose -f docker-compose.yml -f docker-compose.setup.yml down --remove-orphans
  6. setup_1 |
  7. setup_1 | You will have to re-start the stack after removing setup containers.
  8. setup_1 |
  9. setup_1 | Your 'elastic' user password is: Z8GFVXu9UVsBrM6nup5fHw==
  10. stack-docker_setup_1 exited with code 0
  • 启动堆栈

在前台启动堆栈以查看容器日志:

  1. docker-compose up

当您看到Kibana记录了Beats家族发送的对健康检查请求的响应并且您在日志中看到至少一个心跳条目时,可以尝试登录(下面的步骤4):

  1. 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"}
  2. ...
  3. 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容器,映像和网络,因此使用后果自负。

  • 转到http:// localhost:5601登录到Kibana。

登录后(使用弹性用户和您在上面捕获的密码),通过左侧菜单从“仪表板”部分中浏览已安装的仪表板。 心跳是Beat服务之一,可从提供的URL列表中监视您的服务正常运行时间。 打开仪表板Heartbeat HTTP监视,并查看堆栈的功能以进行数据可视化。

format_png

JHipster控制台

Jhipster控制台是基于Elastic Stack的出色监控解决方案,可随着时间的推移可视化和分析JHipster应用程序指标。 控制台提供了预配置的仪表板,以监视微服务基础架构。 您可以在JHipster Console的文档中查看功能的完整列表。

从JHipster控制台启动的一种更简单的方法是部署应用程序,并使用docker -compose子生成器启用监视。 您将使用它来:

  • 使用JHipster创建微服务架构
  • 使用JHipster控制台启用监视
  • 配置OpenID Connect以对微服务进行身份验证

使用JHipster创建Java微服务架构

要安装一个版本JHipster的,将在这里工作,你需要安装Node.js的 。

安装JHipster

  1. npm install -g generator-jhipster@6.3.1
  2. jhipster --version

版本命令应输出如下内容:

  1. INFO! Using JHipster version installed globally
  2. 6.3.1

为项目创建目录:

  1. mkdir jhipster
  2. cd jhipster

创建apps.jh以使用JHipster域语言(JDL)定义商店,博客和网关微服务。 我们将重新创建本教程之前构建的基于Java的微服务架构示例。

  1. application {
  2. config {
  3. baseName gateway,
  4. packageName com.okta.developer.gateway,
  5. applicationType gateway,
  6. authenticationType oauth2,
  7. prodDatabaseType postgresql,
  8. serviceDiscoveryType eureka,
  9. testFrameworks [protractor]
  10. }
  11. entities Blog, Post, Tag, Product
  12. }
  13. application {
  14. config {
  15. baseName blog,
  16. packageName com.okta.developer.blog,
  17. applicationType microservice,
  18. authenticationType oauth2,
  19. prodDatabaseType postgresql,
  20. serverPort 8081,
  21. serviceDiscoveryType eureka
  22. }
  23. entities Blog, Post, Tag
  24. }
  25. application {
  26. config {
  27. baseName store,
  28. packageName com.okta.developer.store,
  29. applicationType microservice,
  30. authenticationType oauth2,
  31. databaseType mongodb,
  32. devDatabaseType mongodb,
  33. prodDatabaseType mongodb,
  34. enableHibernateCache false,
  35. serverPort 8082,
  36. serviceDiscoveryType eureka
  37. }
  38. entities Product
  39. }
  40. entity Blog {
  41. name String required minlength(3),
  42. handle String required minlength(2)
  43. }
  44. entity Post {
  45. title String required,
  46. content TextBlob required,
  47. date Instant required
  48. }
  49. entity Tag {
  50. name String required minlength(2)
  51. }
  52. entity Product {
  53. title String required,
  54. price BigDecimal required min(0),
  55. image ImageBlob
  56. }
  57. relationship ManyToOne {
  58. Blog{user(login)} to User,
  59. Post{blog(name)} to Blog
  60. }
  61. relationship ManyToMany {
  62. Post{tag(name)} to Tag{post}
  63. }
  64. paginate Post, Tag with infinite-scroll
  65. paginate Product with pagination
  66. microservice Product with store
  67. microservice Blog, Post, Tag with blog

现在,在您的jhipster文件夹中,运行import-jdl generator 。

  1. jhipster import-jdl apps.jh

使用

在项目文件夹中,为docker-compose配置创建一个子文件夹,然后运行该子生成器。

  1. mkdir docker-compose
  2. cd docker-compose
  3. jhipster docker-compose

生成器将要求您定义以下配置:

  1. 应用程序类型:微服务应用程序
  2. 网关类型: 基于Zuul的JHipster
  3. 包括哪些应用程序: 博客网关商店
  4. 如果数据库是集群的:
  5. 如果必须启用监视: 是,使用JHipster控制台
  6. 监视其他技术: Zipkin
  7. JHipster注册表的密码: 默认

您可以在下面的记录中查看其工作原理。

当发电机快要用完时,输出中将显示警告:

  1. WARNING! Docker Compose configuration generated, but no Jib cache found
  2. If you forgot to generate the Docker image for this application, please run:
  3. To generate the missing Docker image(s), please run:
  4. ./mvnw package -Pprod verify jib:dockerBuild in /home/indiepopart/jhipster/blog
  5. ./mvnw package -Pprod verify jib:dockerBuild in /home/indiepopart/jhipster/gateway
  6. ./mvnw package -Pprod verify jib:dockerBuild in /home/indiepopart/jhipster/store

您可以按照上述说明创建微服务映像,或创建一个聚合器pom.xml并仅使用一个命令来构建所有映像,如我们在Java微服务上的文章所述。

为您的微服务设置Okta OpenID Connect(OIDC)身份验证

默认情况下,微服务架构通过Keycloak进行身份验证。 更新设置以将Okta用作身份验证提供程序:

首先,前往Okta以获得免费的开发者帐户 。

登录后,点击您的单位 ,它将带您进入开发者控制台 。 转到“ 应用程序”部分,并添加一个新的Web应用程序 。 设置以下身份验证设置:

  • 名称:为您的应用程序命名
  • 基本URI: http://localhost:8761http://localhost:8080
  • 登录重定向URI: http://localhost:8080/login/oauth2/code/oidchttp://localhost:8761/login/oauth2/code/oidc
  • 允许的授予类型:授权码和刷新令牌

为简单起见,本教程仅创建Web App,并且其凭据将用于所有服务。 在实际环境中,每个服务都必须使用其自己的凭据进行标识,并且您应该在Okta控制台中为它们中的每个创建一个Web应用程序或服务。

复制Client IDClient secret ,因为我们将使用它来进行应用程序的设置。 在Okta信息中心的右上角找到组织URL

创建具有以下内容的docker-compose/.env文件:

  1. OIDC_CLIENT_ID=<client_id>
  2. OIDC_CLIENT_SECRET=<client_secret>
  3. RESOURCE_ISSUER_URI=<org_url>/oauth2/default

编辑docker-compose/docker-compose.yml并更新服务blog-appgateway-appstore-appSECURITY_*设置:

  1. SPRING_SECURITY_OAUTH2_CLIENT_PROVIDER_OIDC_ISSUER_URI=${RESOURCE_ISSUER_URI}
  2. SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_OIDC_CLIENT_ID=${OIDC_CLIENT_ID}
  3. SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_OIDC_CLIENT_SECRET=${OIDC_CLIENT_SECRET}

必须为JHipster注册表设置相同的身份验证。 编辑docker-compose/jhipster-registry.yml并设置与gateway-app的environment部分相同的值。

JHipster应用程序需要特定的用户角色ROLE_USERROLE_ADMIN作为ID令牌中的声明。 在Okta开发人员控制台中,转到“ 用户” >“ 组”,并为每个JHipster角色创建一个组,然后将用户添加到每个组。

现在转到“ API” >“ 授权服务器” ,选择默认服务器,然后使用以下设置添加“声明 ”:

  1. 名称:团体
  2. 包含在令牌类型中:ID令牌,始终
  3. 值类型:组
  4. 过滤器:匹配正则表达式,将正则表达式设置为.*

启用调试日志和Zipkin

要将调试日志发送到JHipster控制台,让我们更新prod配置文件中的日志级别。 编辑src/main/resources/config/application-prod.yml ,以将com.okta.developer.*记录器的每个服务( blog-appstore-appgateway-app )的级别设置为DEBUG 。 例如,在博客的application-prod.yml

  1. logging:
  2. level:
  3. com.okta.developer.blog: DEBUG

另外,对于每个服务,更新产品配置文件处于活动状态时要加载的LoggingAspectConfiguration 。 更改@Profile批注:

  1. @Configuration
  2. @EnableAspectJAutoProxy
  3. public class LoggingAspectConfiguration {
  4. @Bean
  5. @Profile({JHipsterConstants.SPRING_PROFILE_DEVELOPMENT, JHipsterConstants.SPRING_PROFILE_PRODUCTION})
  6. public LoggingAspect loggingAspect(Environment env) {
  7. return new LoggingAspect(env);
  8. }
  9. }

Zipkin是一个分布式跟踪系统,可帮助解决微服务体系结构中的延迟问题。 通过在服务之间传播traceId,可以将对不同服务的调用进行关联并作为同一流的一部分进行分析。 JHipster控制台提供了Zipkin服务器和UI,并且JHipster应用程序可以通过Spring Cloud Sleuth与Zipkin集成。 要启用Zipkin跟踪,请将zipkin配置文件添加到zipkin docker-compose/docker-compose.yml blog-appgateway-appstore-app

  1. - SPRING_PROFILES_ACTIVE=prod,swagger,zipkin

您还需要使用以下Maven命令使用zipkin配置文件为blog-appstore-appgateway-app重建Docker映像:

  1. ./mvnw package -Pprod -Pzipkin verify jib:dockerBuild -DskipTests

ProTip:如果您使用的是具有bash shell的系统(例如Linux或MacOs),则可以从jhipster文件夹执行此操作,以一次构建每个项目:
for i in blog gateway store do cd $i ./mvnw package -Pprod -Pzipkin verify jib:dockerBuild -DskipTests cd .. done

运行受监控的微服务架构

您准备好了吗? 转到docker-compose文件夹,并使用以下命令启动服务:

  1. docker-compose up
  2. jhipster-registry_1 | ----------------------------------------------------------
  3. jhipster-registry_1 | Application 'jhipster-registry' is running! Access URLs:
  4. jhipster-registry_1 | Local: http://localhost:8761
  5. jhipster-registry_1 | External: http://172.20.0.2:8761
  6. jhipster-registry_1 | Profile(s): [composite, dev, swagger, oauth2]
  7. jhipster-registry_1 | ----------------------------------------------------------

使用Okta用户凭据登录到http://localhost:8761的JHipster注册表,并检查服务的运行状况。

format_png 1

所有服务启动后,登录到网关应用程序并创建一些博客和帖子以产生流量。 为此,请使用应用程序左上方的“ 实体”菜单。 网关的主页位于http://localhost:8080

有趣的部分! 通过http://localhost:5601访问JHipster控制台。 转到“仪表板”部分,然后打开“ requests-dashboard” 。 您应该会看到一些漂亮的曲线:

format_png 2

由于您将JHipster控制台与Zipkin UI集成在一起,因此在traces-dashboard中,您可以在左侧找到最长的跟踪持续时间。 如果单击右侧的traceId,它将在UI中打开跟踪,您将能够检查流。

format_png 3

了解有关JHipster和Elastic Stack的更多信息

我希望您喜欢本教程以及Elastic StackJHipster Console监视微服务架构的功能。 要继续扩展您对JHipster监控以及Okta与Elastic Stack集成的知识,请查看以下链接:

  • Github上的JHipster控制台
  • JHipster监视文档
  • SAML身份验证和弹性堆栈
  • Kibana中的身份验证

如果您喜欢这篇文章,那么您很可能会喜欢我们关于JHipster和微服务的其他文章:

  • 带有Java 12和JHipster 6的更好,更快,更轻量的Java
  • 通过Java Hipster升级Spring Security OAuth和JUnit测试
  • 带有Spring Boot和Spring Cloud的Java微服务
  • 带有Spring Cloud Config和JHipster的Java微服务
  • 使用Spring Cloud Gateway保护React式微服务

要在我们发布新帖子时得到通知, 请在Twitter上关注@oktadev 。 我们还会定期将截屏视频发布到我们的YouTube频道 。

ELK堆栈入门最初于2019年9月26日发布在Okta开发人员博客上。

朋友不允许朋友写用户身份验证。 厌倦了管理自己的用户? 立即尝试Okta的API和Java SDK。 数分钟之内即可在任何应用程序中对用户进行身份验证,管理和保护。

翻译自: https://www.javacodegeeks.com/2019/10/get-started-with-the-elk-stack.html

elk入门

发表评论

表情:
评论列表 (有 0 条评论,64人围观)

还没有评论,来说两句吧...

相关阅读

    相关 ElasticSearch入门ELK简介 02

    前言 日志,对于任何系统来说都是及其重要的组成部分。在计算机系统里面,更是如此。但是由于现在的计算机系统大多比较复杂,很多系统都不是在一个地方,甚至都是跨国界的;即使是在