cita-monitor 部署问题-连接不到cita服务

容器内并无错误日志:

$ curl http://127.0.0.1:1920/metrics/cita
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<title>500 Internal Server Error</title>
<h1>Internal Server Error</h1>
<p>The server encountered an internal error and was unable to complete your request. Either the server is overloaded or there is an error in the application.</p>

$ docker logs --details citamon_agent_proxy_exporter
 172.22.0.1 - - [02/Mar/2020:02:25:53 +0000] "GET /metrics/cita HTTP/1.1" 500 290 "-" "curl/7.58.0" "-"
 172.22.0.1 - - [02/Mar/2020:02:28:04 +0000] "GET /metrics/cita HTTP/1.1" 500 290 "-" "curl/7.58.0" "-"
 172.22.0.1 - - [02/Mar/2020:02:32:41 +0000] "GET /metrics/cita HTTP/1.1" 500 290 "-" "curl/7.58.0" "-"

我的操作系统是 centos7 主机ip 是 vpc 内的内网 一个ip

cita 和 monitor 都在一个主机里 ,我再配置 ip 的时候 都是配置到 宿主机的 ip ,按说应该可以访问的

你可以尝试这样:

  1. 先按你现在的方法启动 CITA.
  2. 将 cita-cli 运行在 docker 里,看能不能正常访问 CITA 链 (这两者原理是一样的)。
    把下面命令中的 172.16.13.29 换成你的 HOST_IP .
$ docker run -it --rm cita/cita-ce-cli

   ._____. ._____.  _. ._   ._____. ._____.   ._.   ._____. ._____.
   | .___| |___. | | | | |  |___. | |_____|   |_|   |___. | |_____|
   | |     ._. | | | |_| |  ._. | |   ._.   ._____. ._. | | ._____.
   | |     | | |_| \_____/  | | |_/   | |   | ,_, | | | |_/ |_____|
   | |___. | | ._.   ._.    | |       | |   | | | | | |     ._____.
   |_____| |_| |_|   |_|    |_|       |_|   |_| |_| |_|     |_____|

[       url        ]: http://127.0.0.1:1337
[       pwd        ]: /opt/cita
[      color       ]: true
[      debug       ]: false
[       json       ]: true
[    encryption    ]: secp256k1
[ completion_style ]: List
[    edit_style    ]: Emacs
[   save_private   ]: false
No previous history.
cita> switch --url http://172.16.13.29:1337
[       url        ]: http://172.16.13.29:1337
[       pwd        ]: /opt/cita
[      color       ]: true
[      debug       ]: false
[       json       ]: true
[    encryption    ]: secp256k1
[ completion_style ]: List
[    edit_style    ]: Emacs
[   save_private   ]: false
cita> rpc blockNumber
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": "0x8eb"
}
cita> rpc get
getBlockByHash         getBalance             getMetaData            getFilterLogs          getVersion
getBlockByNumber       getTransactionReceipt  getTransaction         getBlockHeader
getCode                getTransactionProof    getTransactionCount    getStateProof
getAbi                 getLogs                getFilterChanges       getStorageAt
cita> rpc getMetaData
{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "blockInterval": 3000,
    "chainId": 0,
    "chainIdV1": "0x1",
    "chainName": "test-chain",
    "economicalModel": 0,
    "genesisTimestamp": 1582960342801,
    "operator": "test-operator",
    "tokenAvatar": "https://cdn.citahub.com/icon_cita.png",
    "tokenName": "CITA Test Token",
    "tokenSymbol": "CTT",
    "validators": [
      "0x76393ac3ec2679a152b91f47ce77a1d5a8b0ea7d"
    ],
    "version": 2,
    "website": "https://www.example.com"
  }
}
cita>

我也是感觉跟我的网络有关系,应该是monitor 访问不到 cita的 1337

上如上面的步骤没有成功。

请把 CITA 链的日志 test-chain/0/logs/cita-chain.log 是后 100 行帖上来,我看一下。

按照了你的方法 ,输出一切正常。无错误

那尝试像我一下,clone 都新的代码。然后进入 agent -> 修改 .env -> 启动 agent 看看?

我刚刚又测试了一下,我把agent 和 cita 跑在 独立的 2个机器里 ,是可以链接的 ,看来还是我的网络问题,还是agent 不能访问 宿主机的 cita 1337 服务

你配的是公网 IP ?
我也是把 agent 与 cita 配在同一主机(理论上讲也是应该配在同一主机),但使用的是内网 IP。

我的机器是 阿里云 vpc 下的一个机器 ,是一个 192.168. 内网的ip 。我再evn 里也配置的这个 ip

宿主机本身是没有外网ip 的

我用的也是阿里云,我用的是 ifconfig 输出的 eth0 那个 IP.

BTW, 我使用的是 Ubuntu 18.04 的系统。

docker --version
Docker version 19.03.6, build 369ce74a3c

我的系统是centos7

[root@ali-funji-cita-01 cita_exporter]# docker --version
Docker version 19.03.6, build 369ce74a3c

难道跟操作系统有关 ?

我没有用过 centos7 , 你可以先按我的上面的命令启动 CITA , 运行 cita-monitor 看一下。

[2020-03-02 13:21:34,430] ERROR in app: Exception on /metrics/cita [GET]
Traceback (most recent call last):
File “/usr/local/lib/python3.6/dist-packages/flask/app.py”, line 2311, in wsgi_app
response = self.full_dispatch_request()
File “/usr/local/lib/python3.6/dist-packages/flask/app.py”, line 1834, in full_dispatch_request
rv = self.handle_user_exception(e)
File “/usr/local/lib/python3.6/dist-packages/flask/app.py”, line 1737, in handle_user_exception
reraise(exc_type, exc_value, tb)
File “/usr/local/lib/python3.6/dist-packages/flask/_compat.py”, line 36, in reraise
raise value
File “/usr/local/lib/python3.6/dist-packages/flask/app.py”, line 1832, in full_dispatch_request
rv = self.dispatch_request()
File “/usr/local/lib/python3.6/dist-packages/flask/app.py”, line 1818, in dispatch_request
return self.view_functionsrule.endpoint
File “cita_monitor_agent.py”, line 316, in exporter
metadata_info = class_result.metadata(hex_number)
File “cita_monitor_agent.py”, line 163, in metadata
return self.cli_request(payload)
File “cita_monitor_agent.py”, line 123, in cli_request
req_result = os.popen(req).read()
File “/usr/lib/python3.6/encodings/ascii.py”, line 26, in decode
return codecs.ascii_decode(input, self.errors)[0]
UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0xe6 in position 215: ordinal not in range(128)

我现在就很奇怪,这请求也都过来了 ,就是在执行py 的时候报错总

我刚刚 测试把cita 跑在docker 里 ,然后我启动monitor 链接cita 的 1337 是可以的。

但是我用 分布式部署的时候 ,就不行 。

麻烦 @leeyr 您用分布式的方式部署下cita 测试一下呢 ?

你能告诉我你是怎么部署的吗?

cita 分布式部署步骤如下:
1.bin/cita create --super_admin “0xdf80a608b3e2xxxxxx9c68c4ba52c6bcc30f9ec” --nodes “192.168.98.242:4000” --enable_tls --chain_name test01

2 …/bin/cita setup test01/0
…/bin/cita start test01/0
…/bin/cita top test01/0 (7个进程都在)

监控的部署,我采用的独立监控ciat的方式
docker run --name=“citamon_agent_cita_exporter_1337”
–pid=“host”
-p 1920:1923
-v /etc/localtime:/etc/localtime
-v “/data/cita/cita_secp256k1_sha3/”:"/data/cita_secp256k1_sha3/"
-v “/data/cita/cita_secp256k1_sha3/test01/0”:"/data/cita_secp256k1_sha3/test-chain/0"
-v “pwd/cita_monitor_agent.py”:"/config/cita_monitor_agent.py"
-e NODE_IP_PORT=“192.168.98.242:1337”
-e NODE_DIR="/data/cita_secp256k1_sha3/test01/0"
citamon/agent-cita-exporter

我刚刚又做了一个测试,您给分析下,我在同一台宿主机上分别跑了2个 cita 服务 ,一个是 docker 方式运行的 (1337),一个是 分布式方式运行(1338), 然后用同一个cita-monitor 去分别连接 两个cita ,docker 下可以正常链接,但是 分布式方式就不行了。您那边其实也用分布式方式测试下

其实你的第二种做法也不是分布式部署。

我可能知道你是什么原因了!

你先用 docker ps 找到 1338 那条链。然后先 docker kill 掉它。

再执行:

$ bin/cita port $(HOST_IP):1338:1338

$ bin/cita setup test01/0

$ bin/cita start test01/0

[root@ali-funji-cita-01 cita_secp256k1_sha3]# ./bin/cita port $(HOST_IP):1338:1338
-bash: HOST_IP: command not found
Expose ports: :1338:1338

这里提示错误 -bash: HOST_IP: command not found