elk日志分析系统_ELK堆栈入门

elk日志分析系统

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配置,以演示单台计算机上的堆栈组件。 安装DockerDocker 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分钟。 完成后,您将看到以下日志:

setup_1  | Setup completed successfully. To start the stack please run:
 setup_1  | 	 docker-compose up -d
 setup_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-orphans
 setup_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容器,图像和网络,因此使用后果自负。

登录后(使用弹性用户和您在上面捕获的密码),通过左侧菜单从“仪表板”部分中浏览已安装的仪表板。 心跳是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 pagination

microservice 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集成的知识,请查看以下链接:

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

要在我们发布新帖子时得到通知,请在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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值