InfluxDBListener - 使用 locust 获取 401

如何解决InfluxDBListener - 使用 locust 获取 401

运行 docker 容器 InfluxDB 数据库,我正在尝试使用 InfluxDBListener 将 locust 数据发送到数据库。

这是我的代码:

@events.init.add_listener
def on_locust_init(environment,**_kwargs):
    """
    Hook event that enables starting an influxdb connection
    """
    bucket = 'load_bucket'
    org = 'some_organization'     # not used
    token = 'zzzz_etc_etc_etc_=='    # not used
    # this settings matches the given docker-compose file
    influxDBSettings = InfluxDBSettings(
        influx_host='localhost',influx_port=8086,user='Load Tester',pwd='some_password',database=bucket
    )
    # start listener with the given configuration
    InfluxDBListener(env=environment,influxDbSettings=influxDBSettings)

locust 日志中的错误:

[2021-06-02 11:42:35,514] ILGUYL-LT1/ERROR/root: Could not connect to influxdb
Traceback (most recent call last):
  File "c:\git\engine-load-tests\venv\lib\site-packages\locust_influxdb_listener\__init__.py",line 55,in __init__
    self.influxdb_client.create_database(influxDbSettings.database)
  File "c:\git\engine-load-tests\venv\lib\site-packages\influxdb\client.py",line 746,in create_database
    self.query("CREATE DATABASE {0}".format(quote_ident(dbname)),File "c:\git\engine-load-tests\venv\lib\site-packages\influxdb\client.py",line 521,in query
    response = self.request(
  File "c:\git\engine-load-tests\venv\lib\site-packages\influxdb\client.py",line 378,in request
    raise InfluxDBClientError(err_msg,response.status_code)
influxdb.exceptions.InfluxDBClientError: 401: {"code":"unauthorized","message":"Unauthorized"}

我正在运行的脚本不在 docker 容器中,而只是在本地运行。

确认:

  • Influx 肯定在 localhost:8086 上运行。我可以在我的电脑上访问 http://localhost:8086 来访问 InfluxDB。
  • 存储桶 load_bucket 已经存在 [注意到 InfluxDBListener 实际上尝试创建数据库]
  • 用户名和密码正确
  • 在我写的另一个脚本中,我可以毫无问题地做到这一点:
    with InfluxDBClient(url="http://localhost:8086",token=token,org=org) as _client:
        with _client.write_api(write_options=WriteOptions(batch_size=500,flush_interval=10_000,jitter_interval=2_000,retry_interval=5_000,max_retries=5,max_retry_delay=30_000,exponential_base=2,write_type=SYNCHRONOUS)) as _write_client:

influx_host='localhost' 更改为 influx_host='influxdb' 后,出现以下错误:

Traceback (most recent call last):
  File "c:\git\engine-load-tests\venv\lib\site-packages\urllib3\connection.py",line 169,in _new_conn
    conn = connection.create_connection(
  File "c:\git\engine-load-tests\venv\lib\site-packages\urllib3\util\connection.py",line 73,in create_connection
    for res in socket.getaddrinfo(host,port,family,socket.SOCK_STREAM):
  File "c:\git\engine-load-tests\venv\lib\site-packages\gevent\_socketcommon.py",line 247,in getaddrinfo
    addrlist = get_hub().resolver.getaddrinfo(host,type,proto,flags)
  File "c:\git\engine-load-tests\venv\lib\site-packages\gevent\resolver\thread.py",line 63,in getaddrinfo
    return self.pool.apply(_socket.getaddrinfo,args,kwargs)
  File "c:\git\engine-load-tests\venv\lib\site-packages\gevent\pool.py",line 161,in apply
    return self.spawn(func,*args,**kwds).get()
  File "src\\gevent\\event.py",line 329,in gevent._gevent_cevent.AsyncResult.get
  File "src\\gevent\\event.py",line 359,line 347,line 327,in gevent._gevent_cevent.AsyncResult._raise_exception
  File "c:\git\engine-load-tests\venv\lib\site-packages\gevent\_compat.py",line 65,in reraise
    raise value.with_traceback(tb)
  File "c:\git\engine-load-tests\venv\lib\site-packages\gevent\threadpool.py",line 167,in __run_task
    thread_result.set(func(*args,**kwargs))
socket.gaierror: [Errno 11001] getaddrinfo failed

During handling of the above exception,another exception occurred:

Traceback (most recent call last):
  File "c:\git\engine-load-tests\venv\lib\site-packages\urllib3\connectionpool.py",line 699,in urlopen
    httplib_response = self._make_request(
  File "c:\git\engine-load-tests\venv\lib\site-packages\urllib3\connectionpool.py",line 394,in _make_request
    conn.request(method,url,**httplib_request_kw)
  File "c:\git\engine-load-tests\venv\lib\site-packages\urllib3\connection.py",line 234,in request
    super(HTTPConnection,self).request(method,body=body,headers=headers)
  File "C:\Python38\lib\http\client.py",line 1255,in request
    self._send_request(method,body,headers,encode_chunked)
  File "C:\Python38\lib\http\client.py",line 1301,in _send_request
    self.endheaders(body,encode_chunked=encode_chunked)
  File "C:\Python38\lib\http\client.py",line 1250,in endheaders
    self._send_output(message_body,line 1010,in _send_output
    self.send(msg)
  File "C:\Python38\lib\http\client.py",line 950,in send
    self.connect()
  File "c:\git\engine-load-tests\venv\lib\site-packages\urllib3\connection.py",line 200,in connect
    conn = self._new_conn()
  File "c:\git\engine-load-tests\venv\lib\site-packages\urllib3\connection.py",line 181,in _new_conn
    raise NewConnectionError(
urllib3.exceptions.NewConnectionError: <urllib3.connection.HTTPConnection object at 0x00000221080B8C10>: Failed to establish a new connection: [Errno 11001] getaddrinfo failed

During handling of the above exception,another exception occurred:

Traceback (most recent call last):
  File "c:\git\engine-load-tests\venv\lib\site-packages\requests\adapters.py",line 439,in send
    resp = conn.urlopen(
  File "c:\git\engine-load-tests\venv\lib\site-packages\urllib3\connectionpool.py",line 755,in urlopen
    retries = retries.increment(
  File "c:\git\engine-load-tests\venv\lib\site-packages\urllib3\util\retry.py",line 574,in increment
    raise MaxRetryError(_pool,error or ResponseError(cause))
urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='influxdb',port=8086): Max retries exceeded with url: /query?q=CREATE+DATABASE+%22load_bucket%22&db=load_bucket (Caused by NewConnectionError('<urllib3.connection.HTTPConnectio
n object at 0x00000221080B8C10>: Failed to establish a new connection: [Errno 11001] getaddrinfo failed'))

During handling of the above exception,another exception occurred:

Traceback (most recent call last):
  File "c:\git\engine-load-tests\venv\lib\site-packages\locust_influxdb_listener\__init__.py",line 332,in request
    response = self._session.request(
  File "c:\git\engine-load-tests\venv\lib\site-packages\requests\sessions.py",line 542,in request
    resp = self.send(prep,**send_kwargs)
  File "c:\git\engine-load-tests\venv\lib\site-packages\requests\sessions.py",line 655,in send
    r = adapter.send(request,**kwargs)
  File "c:\git\engine-load-tests\venv\lib\site-packages\requests\adapters.py",line 516,in send
    raise ConnectionError(e,request=request)
requests.exceptions.ConnectionError: HTTPConnectionPool(host='influxdb',port=8086): Max retries exceeded with url: /query?q=CREATE+DATABASE+%22load_bucket%22&db=load_bucket (Caused by NewConnectionError('<urllib3.connection.HTTPConnec
tion object at 0x00000221080B8C10>: Failed to establish a new connection: [Errno 11001] getaddrinfo failed'))

这是 influxdocker-compose.yml 部分:

$ cat docker-compose.yml
influxdb:
  image: influxdb:latest
  container_name: influxdb
  ports:
    - "8083:8083"
    - "8086:8086"
    - "8090:8090"
  env_file:
    - 'env.influxdb'
  volumes:
    # Data persistency
    # sudo mkdir -p /srv/docker/influxdb/data
    - /srv/docker/influxdb/data:/var/lib/influxdb2
$ cat influxdb.conf
[default]
  url = "http://localhost:8086"
  token = "<my-token>"
  org = "<my org name>"
  active = true
$ cat env.influxdb
INFLUXDB_DATA_ENGINE=tsm1
INFLUXDB_REPORTING_DISABLED=false

解决方法

Influx 肯定在 localhost:8086 上运行

不完全是。假设 InfluxDB 服务在您的 docker-compose.yml 文件中称为“influxdb”,则该数据库在 influxdb:8086 运行,如果您公开端口 8086,则在您的 docker 上显示为 localhost:8086 主持人

但是,运行您的脚本的容器不会将暴露的端口视为 localhost,因此在 python 脚本中,localhost 是您的脚本运行的容器,而不是 Docker 主机。您正在尝试连接到本地端口 8086,该端口没有数据库连接,因此出现错误。

最简单的解决方案是将 influx_host='localhost' 替换为 influx_host='influxdb'(再次假设 influxdb 是您在 docker-compose.yml 文件中拥有的 InfluxDB 服务的名称,编辑根据需要)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)&gt; insert overwrite table dwd_trade_cart_add_inc &gt; select data.id, &gt; data.user_id, &gt; data.course_id, &gt; date_format(
错误1 hive (edu)&gt; insert into huanhuan values(1,&#39;haoge&#39;); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive&gt; show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 &lt;configuration&gt; &lt;property&gt; &lt;name&gt;yarn.nodemanager.res