我正在尝试从Splunk中获取一些信息,以便我可以使用它。我登录成功,但是无法执行任何操作。我试图使保存的搜索和工作无济于事。这是我用来登录并尝试获取保存的搜索的代码。

var splunkjs = require('splunk-sdk');
    var service = new splunkjs.Service({username: "****", password: "*****", host: "dllprdspl01.dl.prd.p.******.com", port: 8089, scheme: "https", version: 5});
    service.login(function(err, success) {
        if (err) {
            throw err;
        }
        console.log("Login was successful: " + success);
        var mySavedSearches = service.savedSearches();
        mySavedSearches.fetch(function(err, mySavedSearches) {
          console.log("There are " + mySavedSearches.list().length + " saved searches");
          var savedSearchColl = mySavedSearches.list();
          for(var i = 0; i < savedSearchColl.length; i++) {
            var search = savedSearchColl[i];
            console.log(i + ": " + savedSearchColl[i].name);
            console.log("    Query: " + savedSearchColl[i].properties().search + "\n");
          }
        });
    });


我再次成功登录,但是当我尝试列出保存的搜索时,出现此错误:

TypeError: Cannot call method 'list' of undefined


登录后,我已将服务打印到控制台,但没有发现任何错误。

我已经能够使用以下代码连接并获取会话密钥:

var splunkjs = require('splunk-sdk');
var xml2js = require('xml2js');

var context = new splunkjs.Context({username: "****", password: "****", host: "****.com", port: 8089, scheme: "https", version: 5});
var sessionKey;
var key = context.login(function(err, success){
  if(err){
    throw err;
  }
  // console.log("Login was successful " + success);
  var keyXml = key.req.res.body;
  var parser = new xml2js.Parser();
  parser.parseString(keyXml, function(err, result){
    sessionKey = result.response.sessionKey[0];
  });
  context.sessionKey = sessionKey;
  console.log(context);
  context.get('services/saved/searches/hamm_test_mn7', function(err, response){
    console.get(response);
  })
});


如果我可以获取会话密钥,则应该登录到splunk。我将如何从那里完成保存的搜索。

最佳答案

在Splunk工作的Neeraj的帮助下,我能够连接到Splunk并获取保存的搜索。我没有注意到我必须在Splunk服务器上安装xml2json。这是doc页,解释所有需要发生的事情。然后,我不得不将版本号更改为4.3,而不是上面的5。然后一切都连接了起来,我能够按需要获得保存的搜索。使用原始代码,似乎我正在连接,但实际上我是在返回一个空服务对象。这是我用来确保已连接的代码。当您看到会话密钥时,您就知道Splunk正在与您交谈。

var splunkjs = require('splunk-sdk');
var service = new splunkjs.Service({username: "admin",password: "changeme",host: "localhost",port:8089,scheme: "https",version: 4.3});
service.login(function (err, success) {
    if (err) console.log("Error logging in", err);
    else console.log(service.sessionKey);
});

09-15 19:20