Daniel S. Blanco 5分钟阅读
在这篇文章中,我们将看到ELK的操作在Java应用程序中导入到日志管理,为此,我们将使用Apache Camel的应用程序。 ELK是如何将一组应用程序,特别是:Elasticsearch,Logstash和Kibana,组合在一起。所有这些都是Elastic开发的开源工具。它们允许您从任何类型的源以及任何格式收集数据以实时搜索,分析和可视化数据。 Logstash是一个服务器端数据处理管道,其同时消耗来自多个不同源的数据。将此数据转换并发送到数据存储库。Elasticsearch是存储数据,搜索和分析引擎。Kibana允许我们根据Elasticsearch的信息,为用户创建图形和仪表板。 目前,这堆栈的应用程序也由BEET组成。但我们不会在这篇文章中谈论它。 在整个帖子中,我们将看到我们如何组装它,如何配置它,并利用Java应用程序的信息。可用堆栈的最简单方法是通过Docker组成。 我们从Elastic开始。它是最重要的组成部分和需要更多资源的组成部分。在生产性环境中,建议创建群集以保持高可用性和完整性能。但是对于我们的示例,作为主要功能,它只有一个节点。否则,它将是一个常见的Docker配置: 我们将指示一个本地文件夹作为容器卷,这将允许我们保持信息,即使我们删除容器也是如此。容器使用的公共网络。暴露的端口:9200和9300。健康检查以检查实例是否仍在正常工作。为此,我们将简单地检查公开的端口在调用时获得响应。 version: "3.7" services: elasticsearch: image: docker.elastic/elasticsearch/elasticsearch:7.10.2 container_name: elasticsearch hostname: elasticsearch environment: - node.name=elasticsearch - cluster.name=es-docker-cluster - discovery.type=single-node volumes: - ./data:/usr/share/elasticsearch/data networks: - elastic ports: - 9200:9200 - 9300:9300 healthcheck: test: curl -s localhost:9200 >/dev/null; if [[ $$?==52 ]]; then echo 0; else echo 1; fi interval: 30s timeout: 10s retries: 5 networks: elastic: driver: bridge 下一节是创建Kibana容器。此工具将读取存储在Elasticsearch中的信息,因此必须知道它在哪里。但这不会在Docker Compose中指示,这对于此工具将具有非常基本的配置。但它将在Yaml配置文件中指示,我们指示为输入卷。 kibana: image: docker.elastic/kibana/kibana:7.10.2 container_name: kibana hostname: kibana volumes: - ./config/kibana.yml:/usr/share/kibana/config/kibana.yml ports: - "5601:5601" networks: - elastic depends_on: - elasticsearch 在配置文件中,我们必须指示瘦身服务的名称,其IP地址,以及最重要的是,其中Elasticsearch所在的位置。 server.name: kibana server: 0.0.0.0 elasticsearchs: [ "elasticsearch:9200" ] monitoring.ui.container.elasticsearch.enabled: true ## X-Pack security credentials elasticsearch.username: elastic elasticsearch.password: changeme 要完成Docker Compose的配置,我们只需要配置LogStash。此配置将有点复杂,包括以下部分: 一个卷,以指示我们将配置LogStash的文件。我们将配置不同流水线的卷,该流水线将作为要通过logstash发送到Elasticsearch的数据的输入。logstash将访问应用程序创建的日志的卷。服务曝光的端口。要使用的JVM的内存配置。 logstash: image: docker.elastic/logstash/logstash:7.10.2 container_name: logstash hostname: logstash volumes: - ./config/logstash.yml:/usr/share/logstash/config/logstash.yml - ./logstash/pipeline:/usr/share/logstash/pipeline - ./lib:/usr/share/lib - /home/myUser/Documentos/logs:/tmp ports: - "5044:5044" - "5000:5000/tcp" - "5000:5000/udp" - "9600:9600" environment: LS_JAVA_OPTS: "-Xmx256m -Xms256m" networks: - elastic depends_on: - elasticsearch logstash.yml文件将允许我们配置该工具。对于此示例,它不会包含许多值。至于KIBANA,我们将设置我们的IP以及ELASTICSEARCH所在的IP: http: 0.0.0.0 xpack.monitoring.elasticsearchs: ["elasticsearch:9200"] ## X-Pack security credentials xpack.monitoring.enabled: true xpack.monitoring.elasticsearch.username: elastic xpack.monitoring.elasticsearch.password: changeme Pipeline文件夹将存储不同的配置文件,该文件将允许Logstash管理不同的信息源并将其发送到Elasticsearch。这些文件分为三个部分: 输入:指示数据源的位置。在我们的情况下,它将是应用程序生成的日志文件。那些安装在体积上的人。过滤器:我们可以在数据上执行任何过滤操作。对于我们的示例,我们不会执行任何信息。输出:我们指示我们将要发送的存储库。在这种情况下,Elastic。 配置Docker Compose配置后,我们可以通过访问路径localhost:9200 来检查它是否正常工作。 下一步将是我们应用程序的配置。关于这一点的最重要的是,我们将使用Logback。并且,通过LogstAshenCoder类,我们将被允许指示某些特征。如输出格式,添加自定义字段,或排除某些包。 input { file { path=> "/tmp/*.log" codec=> "json" type=> "camelelk" } jdbc { jdbc_connection_string=> "jdbc:mysql://sandbox-mysql:3306/library?autoReconnect=true&useSSL=false" jdbc_user=> "reader" jdbc_password=> "password" jdbc_driver_library=> "/usr/share/lib/mysql-connector-java-5.1.38.jar" jdbc_driver_class=> "com.mysql.jdbc.Driver" schedule=> "* * * * *" # our query to fetch blog details statement=> "SELECT ID,NAME,AUTHOR FROM library.BOOK" use_column_value=> true tracking_column=> "id" tracking_column_type=> "numeric" } } output { elasticsearch { hosts=> "elasticsearch:9200" user=> "elastic" password=> "changeme" ecs_compatibility=> disabled index=> "camelelk" } } 我们将启动应用程序并执行多个查询,例如 localhost:9090/book/1 下一步将是配置Kibana能够可视化所有数据。要执行此操作,我们访问 localhost:5601/app/home。在内部我们必须执行两个步骤。 创建一个索引 我们创建一个索引,首先访问“管理空间”菜单选项,然后在左侧菜单中访问索引管理选项。在此屏幕中,我们创建与我们在Logstash流水线中指示的标识符关联的索引。
查看信息 从“主菜单的”发现“选项中,我们可以访问Logstash发送到Elasticsearch的日志。
有了这个,我们将通过日志监控我们的应用程序。我们将能够通过Kibana更好地利用它们。我们可以根据应用程序向我们发送信息,消息内容或按日期和时间范围进行搜索。当您的应用程序具有一定尺寸或产生大量消息时,这是必不可少的。 如果你想看到整个例子,你就在这里。 |
|
来自: 新用户0175WbuX > 《待分类》