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-dockerdocker-compose -f setup.yml up

设置完成后,它将输出弹性用户的密码 。 如果连接速度较慢,则最多可能需要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

当您看到Kibana记录了Beats家族发送的对健康检查请求的响应并且您在日志中看到至少一个心跳条目时,可以尝试登录(下面的步骤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容器,映像和网络,因此使用后果自负。

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

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


JHipster控制台

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

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

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

使用JHipster创建Java微服务架构

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

安装JHipster

npm install -g generator-jhipster@6.3.1
jhipster --version

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

INFO! Using JHipster version installed globally
6.3.1

为项目创建目录:

mkdir jhipster
cd jhipster

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

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

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

jhipster import-jdl apps.jh

使用

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

mkdir docker-compose
cd docker-compose
jhipster docker-compose

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

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

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

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

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

您可以按照上述说明创建微服务映像,或创建一个聚合器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文件:

OIDC_CLIENT_ID=<client_id>
OIDC_CLIENT_SECRET=<client_secret>
RESOURCE_ISSUER_URI=<org_url>/oauth2/default

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

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注册表设置相同的身份验证。 编辑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

logging:level:com.okta.developer.blog: DEBUG

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

- SPRING_PROFILES_ACTIVE=prod,swagger,zipkin

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

./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文件夹,并使用以下命令启动服务:

docker-compose up
jhipster-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用户凭据登录到http://localhost:8761的JHipster注册表,并检查服务的运行状况。


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

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


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


了解有关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入门

elk入门_ELK堆栈入门相关推荐

  1. C语言堆栈入门——堆和栈的区别

    C语言堆栈入门--堆和栈的区别 2010-05-09 22:28:53|  分类: C/C++开发|举报|字号 订阅 下载LOFTER客户端      在计算机领域,堆栈是一个不容忽视的概念,我们编写 ...

  2. Python从入门到精通 - 入门篇 (下)

    上一讲回顾:Python从入门到精通 - 入门篇 (上) 接着上篇继续后面两个章节,函数和解析式. 4 函数 Python 里函数太重要了 (说的好像在别的语言中函数不重要似的).函数的通用好处就不用 ...

  3. python快速编程入门课后简答题答案-编程python入门 编程python入门课后习题

    编程python入门 编程python入门课后习题 米粒妈咪课堂小编整理了填空.选择.判断等一些课后习题答案,供大家参考学习. 第一章 一.填空题 Python是一种面向对象的高级语言. Python ...

  4. 半小时入门MATLAB编程入门基础知识:

    https://learnxinyminutes.com/docs/zh-cn/matlab-cn/ 半小时入门MATLAB编程入门基础知识: % 以百分号作为注释符 %{ 多行注释 可以 这样 表示 ...

  5. python编程入门指南-编程入门指南

    编程入门指南 ----------------------------------------------- 编程入门指南 v1.5 --- https://zhuanlan.zhihu.com/p/ ...

  6. flink入门_Flink从入门到放弃-入门篇

    大数据成神之路: 点我去成神之路系列目录^_^ Java高级特性增强-集合 Java高级特性增强-多线程 Java高级特性增强-Synchronized Java高级特性增强-volatile Jav ...

  7. Apache NIFI入门(读完即入门)

    Apache NIFI入门(读完即入门) 编辑人(全网同名):酷酷的诚 邮箱:zhangchengk@foxmail.com 我将在本文中介绍: 什么是ApacheNIFI,应在什么情况下使用它,理解 ...

  8. 推荐系统从入门到接着入门

    本文转载自:推荐系统从入门到接着入门-张小磊(北京交通大学 计算机科学与技术博士在读) 推荐系统从入门到接着入门 一.前言 二.简介 搜索引擎 推荐引擎 三.所属领域 四.会议介绍 五.推荐系统分类 ...

  9. 第一章 程序设计入门--算法竞赛入门经典

    第一章 程序设计入门–算法竞赛入门经典 知识点一: int m=25; printf("%d\n",m); printf("%03d\n",m); 输出如下: ...

最新文章

  1. 啊D扫肉鸡+无远控双开XP3389 termsrvhack.dll_本地测试
  2. pdf2htmlex linux 编译,如何安装编译pdf2htmlex实现pdf到html的格式转换功能
  3. Android 中的 Service 全面总结
  4. 一次搞定:分布式缓存 Redis 集群搭建!
  5. 乌当区利用大数据织密环境监测保护网
  6. ​Efficient GlobalPointer:少点参数,多点效果
  7. c语言将pwd结果赋给变量,《网络系统管理linux实训》全套PPT电子课件教案-第4章 shell编程.ppt...
  8. Bootstrap3 弹出提示插件的方法
  9. C++类中静态变量和静态方法使用介绍!
  10. VS2010打开项目时弹出错误提示。。。VisualStudio\10.0\ActivityLog.
  11. java 32位无符号整数_Java中32位无符号数的取法
  12. mcgs组态连接oracle数据库,昆仑通态专题(九):MCGS组态软件的实时数据库
  13. python简易问答机器人_Python入门到实践-问答机器人
  14. Python杨辉三角形
  15. matlab中stem_这个假期为STEM中的儿童和儿童使用机器人入门
  16. application/octet-stream
  17. 编译程序与翻译程序、汇编程序的联系与区别,编译过程包括的几个主要阶段,解释程序与编译程序的区别...
  18. 从技术小白到收获BAT研发offer,分享我的学习经验和感悟(赠送相关学习资料)
  19. 现在流行的台式计算机搭配,现在台式电脑的主流配置有哪些?
  20. Shiro 第十七章 OAuth2集成

热门文章

  1. 【每日一题】7月14日题目精讲—压缩
  2. [CQOI]九连环(FFT优化+高精)
  3. 12.15模拟:总结
  4. 牛客-小w的魔术扑克【并查集】
  5. AT3957-[AGC023F]01 on Tree【贪心,堆】
  6. 【做题记录】[SCOI2009]围豆豆
  7. 【背包】作业(jzoj 1986)
  8. 【bfs】WJ的逃离
  9. Hadoop生态Flume(一)介绍
  10. MongoDB查询实现 笛卡尔积,Union All 和Union 功能