0

我注意到这个站点上的 Splunk 文档说这应该支持多个环境 - 查看 python 脚本中的代码,虽然它看起来不像?

SailPoint IIQ 版本:8.1p3 Splunk 版本:8.0.9 TA 版本:2.0.5

查看 Splunk 插件代码(Splunk 用于从 SailPoint 读取数据的 Python 代码)后,我注意到以下信息:

Splunk/etc/apps/Splunk_TA_sailpoint 是插件派生其文件的插件目录。Splunk/etc/apps/Splunk_TA_sailpoint/bin/input_module_sailpoint_identityiq_auditevents.py – 这是引起我注意的相关文件。代码似乎运行的方式是它定义了一个 SINGLE 文件,用于按照下面概述的逻辑存储纪元日期:  

1.最初,有一个文件检查(audit_events_checkpoint.txt)来查看文件是否存在
2.如果Python没有找到它会尝试创建它
3.如果再次失败,它会创建文件夹结构然后添加文件
4. 前三步后,Python 打开文件。
5. 然后 Python 读取文件并在(Unix/Epoch 时间戳)中提取第一个值。
6. 然后它将其用作出站查询的一部分。  

#Read the timestamp from the checkpoint file, and create the checkpoint file if necessary
    #The checkpoint file contains the epoch datetime of the 'created' date of the last event seen in the previous execution of the script. 
    checkpoint_file = os.path.join(os.environ['SPLUNK_HOME'], 'etc', 'apps', 'Splunk_TA_sailpoint', 'tmp', "audit_events_checkpoint.txt")
    try:
        file = open(checkpoint_file, 'r')
    except IOError:
        try:
            file = open(checkpoint_file, 'w')
        except IOError:
            os.makedirs(os.path.dirname(checkpoint_file))
            file = open(checkpoint_file, 'w')
            
    with open(checkpoint_file, 'r') as f:
         checkpoint_time = f.readlines()
     
    #current epoch time in milliseconds 
    # new_checkpoint_time = int((datetime.datetime.utcnow() - datetime.datetime(1970, 1, 1)).total_seconds() *1000)
    
    if len(checkpoint_time) == 1:
        checkpoint_time =int(checkpoint_time[0])
    else:
        checkpoint_time = 1562055000000
        helper.log_info("No checkpoint time available. Setting it to default value.")
    
    #Standard query params, checkpoint_time value is set from what was saved in the checkpoint file
    queryparams= {
         "startTime" : checkpoint_time,
         "startIndex" : 1,
         "count" : 100
    }

  1. 跳到下一个引用,我们发现拉入的 JSON 对象是用来创建系统在下一次请求时使用的新时间戳。
2. 然后它获取这个值并将其写入文件,下次调用时将重用该文件。  

#Iterate the audit events array and create Splunk events for each one
    invalid_response = isListEmpty(auditEvents)
    if not invalid_response:
        for auditEvent in auditEvents:
 
            data = json.dumps(auditEvent)
            event = helper.new_event(data=data, time=None, host=None, index=helper.get_output_index(), source=helper.get_input_type(), sourcetype=helper.get_sourcetype(), done=True, unbroken=True)
            ew.write_event(event)
 
        #Get the created date of the last audit event in the run and save it as a checkpoint key in the checkpoint file
        list_of_created_date = extract_element_from_json(results, ["auditEvents", "created"])
 
        new_checkpoint_created_date = list_of_created_date[-1]
        helper.log_info("DEBUG New checkpoint date \n{}".format(new_checkpoint_created_date))
 
    #Write new checkpoint key to the checkpoint file
        with open(checkpoint_file, 'r+') as f:
            f.seek(0)
            f.write(str(new_checkpoint_created_date))
            f.truncate()

所以这是我对正在发生的事情的想法:当我们为每个环境的连接器(我们总共有 6 个)向 Splunk 输入信息时,checkpoint_file 被覆盖。我还假设每个连接的 env 调用相同的时间戳,因为它们似乎都从同一个文件中提取该信息。我们是否错过了配置,或者这是一个编码差距?

4

0 回答 0