运行Splunk TA-geoip2插件时出现Python版本冲突错误
Splunk 8+ 搭配Python 3.6运行TA-geoip2插件的版本冲突问题
问题现象
在Splunk 8+环境下使用Python 3.6运行TA-geoip2插件时触发报错,单独执行对应Python命令后得到如下错误栈:
C:\Users\strozllc>"C:\Program Files\Splunk\bin\Python3.exe" "C:\Program Files\Splunk\etc\apps\TA-geoip2-main\bin\geoip-command.py Traceback (most recent call last): File "C:\Program Files\Splunk\etc\apps\TA-geoip2-main\bin\geoip-command.py", line 8, in <module> from splunklib.searchcommands import \ File "C:\Program Files\Splunk\etc\apps\TA-geoip2-main\bin\..\lib\splunklib\searchcommands\__init__.py", line 145, in <module> from .environment import * File "C:\Program Files\Splunk\etc\apps\TA-geoip2-main\bin\..\lib\splunklib\searchcommands\environment.py", line 20, in <module> from logging.config import fileConfig File "C:\Program Files\Splunk\Python-3.7\lib\logging\config.py", line 30, in <module> import logging.handlers File "C:\Program Files\Splunk\Python-3.7\lib\logging\handlers.py", line 26, in <module> import logging, socket, os, pickle, struct, time, re File "C:\Program Files\Splunk\Python-3.7\lib\socket.py", line 49, in <module> import _socket ImportError: Module use of python27.dll conflicts with this version of Python
涉及的geoip-command.py第8行代码为:
from splunklib.searchcommands import \ dispatch, StreamingCommand, Configuration, Option, validators
已确认Splunk的bin目录存在python27.dll,但疑惑该文件为何会被Python 3环境调用。
问题原因
这个冲突是因为插件自带的splunklib库是针对Python 2版本编译的,当Python 3加载这个库时,其中的某些底层模块会尝试调用Python 2的python27.dll,导致版本不兼容报错。Splunk 8+默认同时包含Python 2和Python 3环境,但插件的依赖库未适配Python 3。
解决步骤
- 替换适配Python 3的splunklib:删除TA-geoip2插件
lib目录下自带的splunklib文件夹,改用Splunk安装目录下Python-3.7\Lib\site-packages\splunklib中的对应文件,复制到插件的lib目录。 - 配置插件强制使用Python 3:在TA-geoip2插件的
default/app.conf文件中,找到[install]部分,添加或修改python.version = python3,确保插件用Python 3环境运行。 - 清理缓存并重启Splunk:删除Splunk安装目录下
var/lib/splunk/modinputs中的缓存文件,然后重启Splunk服务,让配置生效。
内容的提问来源于stack exchange,提问作者Bob Bobson The Third Esq.
相关产品推荐
相关产品推荐

