[英]InfluxDBListener - Getting 401 using with locust
Running a docker container InfluxDB database, and I'm trying to use the InfluxDBListener to send locust
data to the database.运行 docker 容器 InfluxDB 数据库,我正在尝试使用 InfluxDBListener 将
locust
数据发送到数据库。
Here's my code:这是我的代码:
@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)
Error in locust
log: 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"}
The script which I am running is not in a docker container but just running locally.我正在运行的脚本不在 docker 容器中,而只是在本地运行。
Confirmed:确认的:
load_bucket
already exists [noticed that the InfluxDBListener actually tries to create the DB]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:
After changing influx_host='localhost'
to influx_host='influxdb'
, I get the following error:将
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, port, family, 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, in gevent._gevent_cevent.AsyncResult.get
File "src\\gevent\\event.py", line 347, in gevent._gevent_cevent.AsyncResult.get
File "src\\gevent\\event.py", 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, url, body=body, headers=headers)
File "C:\Python38\lib\http\client.py", line 1255, in request
self._send_request(method, url, 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, encode_chunked=encode_chunked)
File "C:\Python38\lib\http\client.py", 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, url, 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 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 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'))
Here is the influx
section of the docker-compose.yml
:这是
docker-compose.yml
的influx
部分:
$ 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 is definitely running on localhost:8086
Influx 肯定在 localhost:8086 上运行
Not quite.不完全的。 Assuming the InfluxDB service is called "influxdb" in your docker-compose.yml file, the db is running at
influxdb:8086
which, if you expose port 8086, is visible as localhost:8086
on your docker host .假设 InfluxDB 服务在您的 docker-compose.yml 文件中称为“influxdb”,则 db 在
influxdb:8086
运行,如果您公开端口 8086,则在 docker 主机上显示为localhost:8086
。
However, the container running your script does not see the exposed port as localhost
, so in the python script localhost
is the container where thy script runs, not the Docker host machine.但是,运行脚本的容器不会将暴露的端口视为
localhost
,因此在 python 脚本中, localhost
是运行脚本的容器,而不是 Docker 主机。 You're attempting to connect to the local port 8086, which doesn't have a DB connection, and so the error.您正在尝试连接到没有数据库连接的本地端口 8086,因此出现错误。
The easiest solution is to replace influx_host='localhost'
with influx_host='influxdb'
(again with the assumption that influxdb
is the name of the InfluxDB service you have in the docker-compose.yml file, edit as needed).最简单的解决方案是将
influx_host='localhost'
替换为influx_host='influxdb'
(再次假设influxdb
是您在 docker-compose.yml 文件中拥有的 InfluxDB 服务的名称,根据需要进行编辑)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.