在java中连接到Kibana
我们的软件倾向于使用很多线程池-主要是通过java.util.concurrent.ExecutorService实现(通过Executors.new...。我们为各种异步用例创建这些用例,它们可以在各处看到。所有这些执行器都有一个线程工厂。它隐藏在默认工厂方法中,但可以提供线程工厂。如果没有提供,则在需要线程时使用默认线程工厂。
当使用Spring时,可以使用<task:executor />。在这种情况下,每个Executor服务的线程工厂都由Spring提供,它使用Executorbean的名称(id="executorName")。但是对于那些不是由Spring创建的线程,使用的是一个默认名称,它对线程没有帮助,也不允许您按名称区分线程。
您需要按名称区分线程--在出现性能问题的情况下,您需要研究各种选项:线程转储和使用top命令。在
这两种情况下,了解线程服务的功能是有用的,因为转储中的堆栈跟踪可能并不总是显示出来的。
我最喜欢的快速调查工具是top。更准确地说,top -H -p <pid>。这显示了通常的顶部表,但是-H标志意味着应该打印所选进程的线程。基本上,您得到的CPU最多,并且当前活动线程,按名称。在这种情况下,使用自定义名称是非常有用的。
但是你是怎么确定名字的呢?通过在创建每个执行器时指定一个命名线程工厂。这是
https://www.douban.com/note/810527584/
我使用的方法是基于第二个答案:
|
1
2
3
4
5
|
public class AsyncUtils { public static ThreadFactory createNamedThreadFactory(String name) { return new ThreadFactoryBuilder().setNameFormat(name + "-%d").build(); }} |
通过Spring集中管理所有执行器可能是一个更好的主意,但并不是每个人都在使用Spring,有时还需要一个执行器来实现一小部分功能,甚至可以超出Springbean。所以把这种方法放在你的袖子里是个好主意。
当您在AWS上使用托管Elasticearch服务时,通常选择一个加密连接(通过kms托管密钥),这意味着您不能只使用任何工具连接到Elasticearch集群。实际上,为了手动执行命令,最简单的选择是使用内置的Kibana及其开发工具。
https://m.douban.com/mip/note/810527584/
然而,由于典型的安全防范措施,与Kibana的连接也并非微不足道。ElasticSearch可以在VPC外部或内部运行。如果您在VPC之外运行它,您必须修改它的访问策略以允许来自一组IP(例如您的办公网络)的连接。
但是,如果您在VPC中运行它(这是推荐的),则必须连接到VPC。但它们都相当复杂,有时甚至会带来额外的成本。
一种简单得多的方法是通过SSH连接到VPC中的机器(通常是您的堡垒/跳转主机),并将其用作浏览器的SOCKS代理。这些步骤是:
- 打开一条SSH隧道。如果你在使用Windows,inux上, –
$ ssh -D 1337 -q -C -N user@yourdomain.com - 在浏览器中设置SOCKS代理。在Firefox上,打开选项并键入“SOCKS”,您将只能选择一个选项(在NetworkOptions中),然后设置localhost,1337(或您选择的任何端口)。
- 在浏览器中打开Kibana URL。请注意,现在您的所有浏览器流量将通过您的VPC,因此取决于VPC配置,其他网站可能无法工作。
就是这样,这是一个快速的提示,可能会节省大量的时间试图使一个VPC连接工作。

浙公网安备 33010602011771号