簡體   English   中英

FIWARE QuantumLeap 健全性檢查失敗:QuantumLeap 無法從 Orion 獲取更改的數據

[英]FIWARE QuantumLeap Sanity Check failed: QuantumLeap can't get changed data from Orion

我在 virtualMachine(帶有 Ubuntu 的virtualBox)和生產服務器(CentOS)中檢查了quantumLeap Sanity Check。 使用相同的 docker-compose.yml,在 virtualManchine 上的完整性檢查成功,但在生產服務器上失敗,這真的很奇怪,誰能幫助我? 非常感謝。 @傑森福克斯

健全性檢查的步驟如下https://quantumleap.readthedocs.io/en/latest/admin/check/ ,我粘貼在下面。

結果的差異僅在第 7 步。在 virtualMachine 上,我可以從quantumLeap 獲取更新的數據:

{
  "attrName": "precipitation",
  "entityId": "air_quality_observer_be_001",
  "index": [
    "2020-05-03T11:18:14.000",
    "2020-05-03T11:18:55.000"
  ],
  "values": [
    0.0,
    100.0
  ]
}

但是在生產服務器上,結果是:

{
  "description": "No records were found for such query.",
  "error": "Not Found"
}

筆記:

  1. 完整性檢查步驟中的這些命令被復制到終端,因此不會有拼寫錯誤。

  2. 結果的差異僅在第 7 步。我刪除了 virtualMachine 和生產服務器上的舊圖像,以便提取最新的圖像。

  3. 在生產服務器上運行了一個基於固件的系統(orion、mongoDB、IoTAgents、quantumLeap、CrateDB、Grafana),一切都很好。 但是一周前,服務器上的硬盤已經滿了,耗盡了,所有的容器都宕機了。 我清理了一些巨大的日志文件並釋放了一些空間,然后我打開了基於固件的系統,發現 Grafana 上沒有顯示數據。 經過檢查,我發現原因是QuantumLeap沒有將數據存儲到crateDB中,但我不確定根本原因是orion還是quantumLeap。 因此,我決定按照quantumLeap 文件的建議進行完整性檢查。 這就是故事。

  4. 順便說一句,quantumLeap 的訂閱可以從 orion 獲取,但我無法從quantumLeap 獲取更改的數據。 為什么最新更改的數據沒有同步到quantumLeap?

健全性檢查步驟:

1.查看獵戶座版本

curl -X GET http://0.0.0.0:1026/version -H 'Accept: application/json'

2.查看QuantumLeap版本

curl -X GET http://0.0.0.0:8668/version -H 'Accept: application/json'

3.為“QuantumLeap”創建 Orion 訂閱

curl -X POST \
'http://0.0.0.0:8668/v2/subscribe?orionUrl=http://orion:1026/v2&quantumleapUrl=http://quantumleap:8668/v2&entityType=AirQualityObserved' \
-H 'Accept: application/json'

4.檢查你的貓從獵戶座獲得這樣的訂閱

curl -X GET http://0.0.0.0:1026/v2/subscriptions \
-H 'Accept: application/json'

5.將AirQualityObserved的實體插入Orion

curl -X POST \
'http://0.0.0.0:1026/v2/entities?options=keyValues' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
    "id": "air_quality_observer_be_001",
    "type": "AirQualityObserved",
    "address": {
        "streetAddress": "IJzerlaan",
        "postOfficeBoxNumber": "18",
        "addressLocality": "Antwerpen",
        "addressCountry": "BE"
    },
    "dateObserved": "2017-11-03T12:37:23.734827",
    "source": "http://testing.data.from.smartsdk",
    "precipitation": 0,
    "relativeHumidity": 0.54,
    "temperature": 12.2,
    "windDirection": 186,
    "windSpeed": 0.64,
    "airQualityLevel": "moderate",
    "airQualityIndex": 65,
    "reliability": 0.7,
    "CO": 500,
    "NO": 45,
    "NO2": 69,
    "NOx": 139,
    "SO2": 11,
    "CO_Level": "moderate",
    "refPointOfInterest": "null"
}'

6.更新獵戶座同一實體的降水量值。

curl -X PATCH \
http://0.0.0.0:1026/v2/entities/air_quality_observer_be_001/attrs \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
    "precipitation": {
    "value": 100,
    "type": "Number"
    }
}'

7.從quantumLeap查詢同一實體的降水變化記錄。

curl -X GET \
'http://0.0.0.0:8668/v2/entities/air_quality_observer_be_001/attrs/precipitation?type=AirQualityObserved' \
-H 'Accept: application/json'

docker-compose.yml的零件:

orion:
    image: fiware/orion
    hostname: orion
    container_name: fiware-orion
    depends_on:
      - mongo-db
    expose:
      - "1026"
    ports:
      - "1026:1026"
    networks:
      - default
    command: -dbhost mongo-db -logLevel ERROR -corsOrigin __ALL
mongo-db:
    image: mongo:3.6
    hostname: mongo-db
    container_name: db-mongo
    expose:
      - "27017"
    ports:
      - "27017:27017"
    networks:
      - default
    command: --bind_ip_all --smallfiles
    volumes:
      - mongo-db:/data
cratedb:
    image: crate:3.1.2
    hostname: cratedb
    container_name: db-crate
    expose:
      - "4200"
      - "4300"
      - "5432"
    ports:
      - "4200:4200"
      - "4300:4300"
      - "5432:5432"
    networks:
      - default
    command: -Ccluster.name=democluster -Chttp.cors.enabled=true -Chttp.cors.allow-origin="*"
    volumes:
      - crate-db:/data
quantumleap:
    image: smartsdk/quantumleap
    hostname: quantumleap
    container_name: fiware-quantumleap
    expose:
      - "8668"
    ports:
      - "8668:8668"
    depends_on:
      - cratedb
    environment:
      - CRATE_HOST=cratedb # host name of CrateDB

沒有解決,但有一點線索。

我從quantumLeap 那里得到了一些日志。 quantumLeap 中有一個 crate 客戶端,原因可能是quantumLeap 中的 crate 客戶端工作不正常。

我在這里粘貼日志:

crate.client.exceptions.ProgrammingError: SQLActionException[ClusterBlockException: blocked by: [FORBIDDEN/12/index read-only / allow delete (api)];]
172.18.1.1 - - [04/May/2020 17:00:33] "POST /v2/notify HTTP/1.1" 500 -
INFO:werkzeug:172.18.1.1 - - [04/May/2020 17:00:33] "POST /v2/notify HTTP/1.1" 500 -
INFO:translators.factory:Backend selected for tenant 'iothouse' is: crate
ERROR:app:Exception on /v2/notify [POST]
Traceback (most recent call last):
  File "/usr/local/lib/python3.6/site-packages/flask/app.py", line 2446, in wsgi_app
    response = self.full_dispatch_request()
  File "/usr/local/lib/python3.6/site-packages/flask/app.py", line 1951, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/usr/local/lib/python3.6/site-packages/flask/app.py", line 1820, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/usr/local/lib/python3.6/site-packages/flask/_compat.py", line 39, in reraise
    raise value
  File "/usr/local/lib/python3.6/site-packages/flask/app.py", line 1949, in full_dispatch_request
    rv = self.dispatch_request()
  File "/usr/local/lib/python3.6/site-packages/flask/app.py", line 1935, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/usr/local/lib/python3.6/site-packages/connexion/decorators/decorator.py", line 48, in wrapper
    response = function(request)
  File "/usr/local/lib/python3.6/site-packages/connexion/decorators/uri_parsing.py", line 143, in wrapper
    response = function(request)
  File "/usr/local/lib/python3.6/site-packages/connexion/decorators/validation.py", line 172, in wrapper
    response = function(request)
  File "/usr/local/lib/python3.6/site-packages/connexion/decorators/validation.py", line 347, in wrapper
    return function(request)
  File "/usr/local/lib/python3.6/site-packages/connexion/decorators/parameter.py", line 126, in wrapper
    return function(**kwargs)
  File "/src/ngsi-timeseries-api/src/reporter/reporter.py", line 189, in notify
    trans.insert(payload, fiware_s, fiware_sp)
  File "/src/ngsi-timeseries-api/src/translators/crate.py", line 189, in insert
    fiware_servicepath)
  File "/src/ngsi-timeseries-api/src/translators/crate.py", line 297, in _insert_entities_of_type
    self.cursor.executemany(stmt, entries)
  File "/usr/local/lib/python3.6/site-packages/crate/client/cursor.py", line 67, in executemany
    self.execute(sql, bulk_parameters=seq_of_parameters)
  File "/usr/local/lib/python3.6/site-packages/crate/client/cursor.py", line 54, in execute
    bulk_parameters)
  File "/usr/local/lib/python3.6/site-packages/crate/client/http.py", line 328, in sql
    content = self._json_request('POST', self.path, data=data)
  File "/usr/local/lib/python3.6/site-packages/crate/client/http.py", line 448, in _json_request
    _raise_for_status(response)
  File "/usr/local/lib/python3.6/site-packages/crate/client/http.py", line 187, in _raise_for_status
    error_trace=error_trace)

解決了。 根本原因在於 crateDB。 當硬盤耗盡時,crateDB 關閉,每個表都設置為只讀。 即使在磁盤空間被釋放並且低於閾值之后,只讀塊也不會自動從表中刪除。

在 crateDB 中使用以下命令將 readonly 標志設置為 false 后一切正常:

SHOW CREATE TABLE <tableName>;
ALTER TABLE <tableName> SET ("blocks.read_only_allow_delete" = FALSE);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM