-1

Jest API を使用して Elasticsearch(ELK) に接続する際に問題に直面しています。SCROLLとSCANをサポートし、証明書ベースの認証もサポートするELK用の残りのJava APIを探しています。

Jest と Flummi が利用可能なものであることがわかりました。

Jest は人気があり、サポートも充実しているため、使用しようとしています。

ELK データベースには認証用の証明書が必要です。これは個人証明書にインストールされています。

私の質問は、Jest クライアントを使用して、証明書を使用して HTTP 要求を行うにはどうすればよいですか? いくつかのコードを見つけましたが、役に立ちません。私のコードは以下です。

    package pkg;

      import io.searchbox.core.*;

      import com.google.gson.JsonArray;
      import org.elasticsearch.index.query.QueryBuilders;
      import org.elasticsearch.search.builder.SearchSourceBuilder;

      import org.apache.http.conn.ssl.NoopHostnameVerifier;
      import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
      import org.apache.http.ssl.SSLContextBuilder;
      import org.apache.http.ssl.TrustStrategy;
      import org.apache.http.nio.conn.SchemeIOSessionStrategy;
      import org.apache.http.nio.conn.ssl.SSLIOSessionStrategy;

      import java.security.KeyManagementException;
      import java.security.KeyStore;
      import java.security.KeyStoreException;
      import java.security.NoSuchAlgorithmException;
      import java.security.NoSuchProviderException;
      import java.security.cert.CertificateException;

      import javax.net.ssl.HostnameVerifier;
      import javax.net.ssl.SSLContext;

      import java.io.IOException;

      import io.searchbox.client.JestClient;
      import io.searchbox.client.JestClientFactory;
      import io.searchbox.client.JestResult;
      import io.searchbox.client.config.HttpClientConfig;

      import io.searchbox.params.Parameters;


      public class ScrollELK {

        private static final String INDEX = "daivb-logs";
        private static final String TYPE = "cep";

        public void scroll() throws IOException, KeyManagementException, NoSuchAlgorithmException, KeyStoreException, NoSuchProviderException {     

        //SSL certificate incorporation         
        SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() 
           {  @java.lang.Override
            public boolean isTrusted(java.security.cert.X509Certificate[] x509Certificates, java.lang.String s) throws CertificateException {
                               return false;}
             }).build();

       // skip hostname checks
            HostnameVerifier hostnameVerifier = NoopHostnameVerifier.INSTANCE;
            SSLConnectionSocketFactory sslSocketFactory = new SSLConnectionSocketFactory(sslContext, hostnameVerifier);
            SchemeIOSessionStrategy httpsIOSessionStrategy = new SSLIOSessionStrategy(sslContext, hostnameVerifier);

             // Get Jest client
            HttpClientConfig clientConfig = new HttpClientConfig                    
                    .Builder("https://***.net/")        
                    .multiThreaded(true)
                    .connTimeout(2000) 
                    .defaultSchemeForDiscoveredNodes("https")                   
                    .sslSocketFactory(sslSocketFactory)
                    .httpsIOSessionStrategy(httpsIOSessionStrategy)
                    .build();

            JestClientFactory factory = new JestClientFactory();
            factory.setHttpClientConfig(clientConfig);
            JestClient client = factory.getObject();


            SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
            searchSourceBuilder.query(QueryBuilders.matchAllQuery());               
            Search search = new Search.Builder(searchSourceBuilder.toString())
                    .addIndex(INDEX)
                    .addType(TYPE)                
                    .setParameter(Parameters.SIZE, 100)
                    .setParameter(Parameters.SCROLL, "5m")
                    .setParameter(Parameters.SEARCH_TYPE, "scan")                   
                    .build();
            JestResult result = client.execute(search);

            JsonArray hits = result.getJsonObject().getAsJsonObject("hits").getAsJsonArray("hits");
            String scrollId = result.getJsonObject().get("_scroll_id").getAsString();
            int count =0;
           do
           {     SearchScroll scroll = new SearchScroll.Builder(scrollId, "5m")                     
                            .build();
                result = client.execute(scroll);       

                hits = result.getJsonObject().getAsJsonObject("hits").getAsJsonArray("hits");
                scrollId = result.getJsonObject().getAsJsonPrimitive("_scroll_id").getAsString();
                count =result.getJsonObject().getAsJsonObject("hits").getAsJsonArray("hits").size();                
                System.out.println(count); 

            }while(count>0);     


            // clear a single scroll id
            ClearScroll clearScroll = new ClearScroll.Builder().addScrollId(scrollId).build();
            result = client.execute(clearScroll);          
        }  
}

Plsは問題について提案します。

4

1 に答える 1