lectl管理運維工具(以下統稱lectl)是物聯網邊緣計算提供的管理Link IoT Edge及其資源的命令行工具,可幫助您更好的使用Link IoT Edge。
獲取幫助
lectl
及子命令后添加--help命令,可獲取幫助信息。頂層的幫助信息如下所示。 $ lectl --help
Usage: lectl [OPTIONS] COMMAND
Manage Link IoT Edge services and facilitate troubleshooting.
Options:
-v, --version Print version information and quit
Commands:
completion Output shell completion code
config Manage configs
console Manage console backend
dbus Manage D-Bus message bus
deployment Manage deployments
device Manage devices
diagnose Check if requirements meet
driver Manage drivers
fc Manage function compute
logger Manage log service and logs
mqtt Manage MQTT service
ota Manage OTA service
rom Manage remote maintenance
router Manage message routing
sc Manage stream compute
scene Manage scenes
Run 'lectl COMMAND --help' for more information on a command.
自動補全
lectl支持bash和zsh的自動補全功能,提升輸入效率。
- bash
通過在網關上執行lectl completion bash命令,生成lectl的bash自動補全腳本,并將腳本導入到Shell中,即可啟動lectl的bash自動補全功能。
但由于bash自動補全腳本依賴bash-completion,且各種包管理系統提供的bash-completion不同,因此您需要按照如下步驟啟動lectl的bash自動補全功能。
- 在網關上執行type _init_completion命令,檢查系統是否安裝了bash自動補全腳本依賴的bash-completion。
- 已安裝:請跳轉到步驟iv。
- 未安裝:請跳轉到步驟ii。
- 通過系統自帶的包管理系統,安裝bash-completion。
- RedHat系列操作系統:yum install bash-completion
- Debian系列操作系統:apt-get install bash-completion
關于更多包管理系統提供的bash-completion相關信息,請參見開源庫。
- 將安裝bash-completion后生成的/usr/share/bash-completion/bash_completion文件添加到.bashrc文件中。
source /usr/share/bash-completion/bash_completion
- 啟用自動補全功能。 有如下兩種啟用方法:
- 直接導入bash自動補全腳本到當前的Shell。(推薦使用)
source <(lectl completion bash)
說明 使用此方法后,在退出Shell時自動補全功能失效。若需要自動補全功能一直生效,請執行echo 'source <(lectl completion bash)' >> ~/.bashrc
,將此命令添加到.bashrc文件中。 - 將bash自動補全腳本添加到bash_completion.d目錄。
lectl completion bash > /etc/bash_completion.d/lectl
- 直接導入bash自動補全腳本到當前的Shell。(推薦使用)
- 在網關上執行type _init_completion命令,檢查系統是否安裝了bash自動補全腳本依賴的bash-completion。
- zsh
通過lectl completion zsh命令,生成lectl的zsh自動補全腳本,并將生成的腳本導入到Shell中,即可啟用zsh自動補全功能。
在網關上執行如下命令,一步實現生成zsh自動補全腳本和啟用自動補全功能。source <(lectl completion zsh)
說明 如果出現complete:13: command not found: compdef
錯誤,請將如下命令復制粘貼到.zshrc文件里。autoload -Uz compinit compinit
連接診斷
lectl diagnose
$ lectl diagnose
....................................................
Get Gateway Triple ***************************[ OK ]
Get IoT Region *******************************[ OK ]
Check Network ********************************[ OK ]
Check DNS Service ****************************[ OK ]
Check MQTT Port ******************************[ OK ]
Check MQTT Cert ******************************[ OK ]
Warning: Inspection of MQTT connection will offline edge-gateway(y or n)y
Gateway Produck Key : a17p****0p0
Gateway Device Name : TASN_******_LinkEdge_Core
Gateway Device Secret : 9ygH*************vZqfv
MQTT Service Host : a17p****0p0.iot-as-mqtt.cn-shanghai.aliyuncs.com
MQTT Service Port : 1883
Check MQTT Connection ************************[ OK ]
字段 | 描述 |
Get Gateway Triple | 獲取網關設備的設備證書。 |
Get IoT Region | 獲取地域配置。 |
Check Network | 檢查網絡連接狀態。 |
Check DNS Service | 檢查DNS服務狀態。 |
Check MQTT Port | 檢查MQTT協議端口。 |
Check MQTT Cert | 檢查MQTT協議證書。 |
Check MQTT Connection | 檢查MQTT連接。 |
管理日志
您可以使用lectl工具,打包日志或臨時改變日志服務行為,方便在出問題時上傳日志或臨時排查。
- 打包日志 執行如下命令打包日志。
lectl logger pack
說明 日志文件被默認打包到當前目錄并命名為logs.zip。您也可以通過-n或--name選項指定輸出文件名,-o或--output選項指定輸出路徑。 - 管理日志服務
lectl允許獲取日志服務配置,并臨時改變日志服務行為。例如,Link IoT Edge出現問題時可以調整全局日志等級到debug,以顯示更多詳細信息。
獲取日志服務配置和改變日志服務行為主要通過如下命令實現。lectl logger config [OPTIONS]
說明 lectl logger config命令支持一次配置多個日志選項。表 2. [OPTIONS] 選項說明 選項名稱 描述 -d,--disable 關閉日志系統、日志等級、模塊日志、模塊日志等級、輸出目標、顯示格式等。不能一次關閉多項內容。 -e,--enable 開啟日志系統、日志等級、模塊日志、模塊日志等級、輸出目標、顯示格式等。不能一次開啟多項內容。 --show 顯示所有配置或指定配置信息。此選項只能以 --show=
形式指定。指定配置項包括:
- dir:日志文件路徑
- level:全局日志等級
- module:模塊日志配置
- format:日志顯示格式
- target:日志輸出目標
- size:日志文件大小
-g,--single-file-mb 設置單個日志文件大小(單位為MB)。 -t,--total-files-mb 設置總體日志文件大小(單位為MB)。 常見的lectl logger config命令示例如下。
$ lectl logger config --show $ lectl logger config --show=level $ lectl logger config -g 10 $ lectl logger config -t 1024 $ lectl logger config -e system $ lectl logger config -e warn $ lectl logger config -e credential $ lectl logger config -e credential:info $ lectl logger config -e stdout $ lectl logger config -e full $ lectl logger config -d warn
管理配置
配置管理主要通過config子命令實現。
- 獲取配置 使用如下命令獲取配置。
lectl config get [OPTIONS] KEY
[OPTIONS]用于提供常見復雜用法的快捷方式,通常擁有獨立的參數。
表 3. [OPTIONS] 選項說明 選項名稱 描述 -d,--d3 獲取所有設備的設備證書信息,無獨立參數。 -v,--driver 獲取給定驅動的配置,要求1個參數,表示驅動名。 -g,--g3 獲取網關設備的設備證書信息,無獨立參數。 -s,--tsl 獲取給定產品的TSL(物模型),要求1個參數,表示產品的ProductKey。 常見的獲取配置命令示例如下。$ lectl config get foo $ lectl config get -g $ lectl config get -d $ lectl config get -s foo $ lectl config get -v foo
- 設置配置 使用如下命令設置設備配置。
lectl config set [OPTIONS] KEY VALUE
[OPTIONS]用于提供常見復雜用法的快捷方式,通常擁有獨立的參數。
表 4. [OPTIONS] 選項說明 選項名稱 描述 -d,--d3 設置設備證書信息,要求3個參數,分別表示ProductKey、DeviceName和DeviceSecret。 -p,--d3f 從給定的文件讀取并設置設備證書信息,要求1個參數,表示文件路徑。 -v,--driver 設置驅動配置,要求2個參數,分別表示驅動名和驅動配置。 -f,--file 從給定的文件讀取并設置鍵、值,要求2個參數,分別表示鍵和文件路徑。 -g,--g3 設置網關的設備證書信息,要求3個參數,分別表示ProductKey、DeviceName和DeviceSecret。 -s,--tsl 設置產品的TSL,要求2個參數,分別表示產品的ProductKey和TSL文件路徑。 常見的設備配置命令示例如下。$ lectl config set foo bar $ lectl config set -f foo /path/to/bar $ lectl config set -g foo bar baz $ lectl config set -d foo bar baz $ lectl config set -p /path/to/foo $ lectl config set -s foo /path/to/bar $ lectl config set -v foo /path/to/bar
- 移除配置 使用如下命令移除配置。
lectl config unset KEY
- 強制寫入 為確保配置操作執行成功,您可以強制配置,并保存數據到磁盤。命令如下。
lectl config flush
管理D-BUS
Link IoT Edge內部組件使用D-Bus通信,可以通過dbus子命令來管理Link IoT Edge內D-Bus消息總線。
通過如下命令可以監聽D-Bus總線上的消息。
lectl dbus monitor
管理部署
您可以通過deployment子命令,管理邊緣實例的部署服務。
可通過lectl deployment show命令,顯示邊緣實例的部署信息。
管理驅動
您可以通過driver子命令,管理Link IoT Edge的驅動。
通過如下命令,查看驅動詳細信息。
lectl driver show [OPTIONS] DRIVER
選項名稱 | 描述 |
[OPTIONS] | 詳細說明請參見本表格下方“[OPTIONS]選項說明”表。 |
DRIVER | 被操作驅動的ID。 |
選項名稱 | 描述 |
-c, --connections | 只顯示驅動連接信息。默認顯示驅動所有信息。 |
--devices | 只顯示設備信息。默認顯示驅動所有信息。您可以指定設備的ProductKey和DeviceName過濾設備。 |
常見的管理驅動命令示例如下。
$ lectl driver show 44c0****78204641a4b9bcf1024176c2
$ lectl driver show -c 44c0****78204641a4b9bcf1024176c2
$ lectl driver show --devices 44c0****78204641a4b9bcf1024176c2
$ lectl driver show --devices=a1t8****n42K/GjCb****gcKYaluGJLN 44c0****78204641a4b9bcf1024176c2
管理設備
您可以通過device子命令來管理Link IoT Edge的設備相關信息。
- 顯示信息
當前設備的狀態信息,可通過lectl device show子命令查看。
一個顯示信息片段如下。lectl device show { "DeviceStats": [ { "ProductKey": "a1t9****42K", "DeviceName": "GjCb****gcKXeluGJLNp", "LocalId": "GjCb9****cKXeluGJLNp", "IsLocal": false, "DriverId": "e0bb****964e4519b4a52f9b719e1dd3", "Activation": "activated", "LocalState": "online", "CloudState": "online", "LastSeenTime": "2020-02-27T14:16:52+08:00", "LastRequestOnlineTime": "2020-02-27T14:16:52+08:00", "LastLocalOnlineTime": "2020-02-27T14:16:52+08:00", "LastCloudOnlineTime": "2020-02-27T14:16:52+08:00", "LastCloudOnlineFinishTime": "2020-02-27T14:16:52+08:00", "LastRequestOfflineTime": "2020-02-26T12:04:45+08:00", "LastLocalOfflineTime": "2020-02-26T12:04:45+08:00", "LastCloudOfflineTime": "2020-02-26T12:04:45+08:00", "LastCloudOfflineFinishTime": "2020-02-26T12:04:45+08:00", "RequestOnlineTimes": 17, "LocalOnlineTimes": 17, "CloudOnlineTimes": 252, "RequestOfflineTimes": 1, "LocalOfflineTimes": 1, "CloudOfflineTimes": 1 } ] }
表 7. 字段說明 選項名稱 描述 ProductKey 產品唯一標識。 DeviceName 設備名稱。 DriverId 關聯該設備的驅動ID。 Activation 設備狀態是否為已激活。 LocalState 設備與網關的連接狀態。 CloudState 設備與云端的連接狀態。 - 獲取設備屬性
可通過getproperties子命令,獲取指定設備的屬性值。
lectl device getproperties [OPTIONS]
表 8. [OPTIONS] 選項說明 選項名稱 是否必選 描述 -i, --identifier 是 用于標識要獲取屬性的設備。格式為 ProductKey/DeviceName
。--key 是 用于標識要獲取的屬性的鍵。格式為JSON字符串數組。 常用的獲取設備屬性命令示例如下。
lectl device getproperties --identifier=a1t8****42K/GjCb****gcKYaluGJLNp --keys='["foo"]'
- 設置設備屬性
可通過setproperties子命令,設置指定設備的屬性值。
lectl device setproperties [OPTIONS]
表 9. [OPTIONS] 選項說明 選項名稱 是否必選 描述 -i, --identifier 是 用于標識要設置屬性的設備。格式為 ProductKey/DeviceName
。--properties 是 用于標識要設置的屬性的鍵。格式為JSON字符串對象。 常用的設置設備屬性命令示例如下。
$ lectl device setproperties --identifier=a1t8****42K/GjCb****gcKYaluGJLNp --properties='["foo": "bar"]'
- 調用設備服務
可通過callservices子命令,調用指定設備上的服務。
lectl device callservice [OPTIONS]
表 10. [OPTIONS] 選項說明 選項名稱 是否必選 描述 -i, --identifier 是 用于標識被調服務所在的設備。格式為 ProductKey/DeviceName
。--name 是 用于標識被調服務的名稱。 --args 否 用于標識被調服務的傳入參數,格式由被調服務定義。 常用的調用設備服務命令示例如下。
$ lectl device callservice --identifier=a1t8****42K/GjCb****gcKYaluGJLNp --name=foo $ lectl device callservice --identifier=a1t8****42K/GjCb****gcKYaluGJLNp --name=foo --args=bar $ lectl device callservice --identifier=a1t8****42K/GjCb****gcKYaluGJLNp --name=foo --args='["bar"]'
管理控制臺
您可以通過console子命令來管理Link IoT Edge提供的邊緣網關控制臺,包括設置證書和設置登錄密碼等。
- 設置證書
您可以通過如下命令設置邊緣網關控制臺證書:
lectl console certificate <SUBJECT>
其中,<SUBJECT>格式為
/type0=value0/type1=value1...
。說明type
取值有C(Country)、ST(State)、L(Localcity)、O(Organization)、OU(Organization Unit)、CN(Common Name)。更多信息,請參見OpenSSL文檔。默認證書的<SUBJECT>為
/C=CN/ST=Zhejiang/L=Hangzhou/O=Link IoT Edge/OU=Link IoT Edge/CN=Link IoT Edge
。 - 設置密碼
您可以通過如下命令設置或更新邊緣網關控制臺用戶密碼:
lectl console password [OPTIONS]
表 11. [OPTIONS] 選項說明 選項名稱 是否必選 描述 -u, --username 是 要更新密碼的用戶名。 -p, --password 是 新的密碼。
管理場景聯動
您可以通過lectl來管理Link IoT Edge上運行的場景聯動,包括場景信息的顯示、啟用、停用、觸發場景聯動等。
- 顯示信息
您可以通過lectl scene show命令查看場景的基本信息、執行信息、統計信息、部署信息等。
執行命令后的結果示例如下。
lectl scene show { "Scenes": [ { "Times": 8, "FailureTimes": 0, "LastState": { "State": "success", "Cause": "", "Time": "2020-02-27T14:25:00+08:00", "Duration": 3 }, "Id": "d141****2aaf4d1d8e3259637e489528", "Name": "scene_test_types", "Running": true, "Time": "2020-02-27T14:17:53+08:00", "Uptime": 466184, "Actions": { "Times": 8, "FailureTimes": 0, "LastState": { "State": "success", "Cause": "", "Time": "2020-02-27T14:25:00+08:00", "Duration": 2 } }, "Conditions": { "Times": 8, "FailureTimes": 0, "LastState": { "State": "success", "Cause": "", "Time": "2020-02-27T14:25:00+08:00", "Duration": 0 } } } ], "Deployment": null }
- 啟動場景聯動
執行如下命令,啟動一個或多個場景聯動。
lectl scene enable SCENE [SCENE...]
其中,SCENE為場景聯動的ID,多個場景聯動ID之間以空格間隔。
- 停止場景聯動
執行如下命令,停止一個或多個場景聯動。
lectl scene disable SCENE [SCENE...]
其中,SCENE為場景聯動的ID,多個場景聯動ID之間以空格間隔。
- 觸發場景聯動
執行如下命令,觸發一個或多個場景聯動。
lectl scene invoke SCENE [SCENE...]
其中,SCENE為場景聯動的ID,多個場景聯動ID之間以空格間隔。
- 重置場景聯動
執行如下命令,移除當前網關上的所有場景聯動。
lectl scene reset
管理函數計算
可以通過lectl管理Link IoT Edge上的函數計算。包括顯示信息、部署函數、移除函數、重置部署、調用函數、重啟函數等。
- 顯示信息
當函數運行異常時,可通過lectl fc show命令查看函數的運行狀態及統計信息。
執行命令后的結果如下。
$ lectl fc show { "Functions": [ { "FunctionId": "90fe****d2a5466993117e58c1ae3f7f", "ServiceName": "helloworld", "FunctionName": "helloworld", "Runtime": "nodejs8", "MemorySize": 1073741824, "Timeout": 5, "RunMode": "OnDemand", "Status": "Running", "InvocationTimes": 157, "ProcessStats": { "Pid": 254, "MemoryUsage": 32988, "StartTime": "2020-02-27 14:17:14.412906 ", "LastStopTime": "1970-01-01 08:00:00.000000 ", "LastInvokeTime": "2020-02-27 14:22:26.547315 ", "ExitTimes": 0 }, "TaskStats": { "HandledTimes": 157, "HandledErrorTimes": 0, "UnhandledTimes": 0, "HandledAverageDuration": 3025, "WaitingAverageDuration": 0, "LastHandledDuration": 2006 }, "RuntimeStats": { "RequestUnhandledTimes": 0, "RequestHandledTimes": 0, "RequestHandledErrorTimes": 0, "RequestHandledAverageDuration": 0 }, "DeploymentStats": { "State": "Success" } } ] }
- 調用函數
使用如下命令調用一個函數。
lectl fc invoke [OPTIONS] FUNCTION
表 12. 參數說明 選項名稱 描述 [OPTIONS] OPTIONS選項,包含如下選項。 -p, --payload:Base64編碼后的參數內容。該參數內容將被原封不動的傳給函數。
FUNCTION 函數ID或者函數ARN(資源名稱,Aliyun Resource Name)。函數ARN格式為 acs:fc:<Region>:<AccountId>:service:<ServiceName>:function:<FunctionName>
。 - 重啟函數 使用如下命令重啟一個或多個函數。
lectl fc restart FUNCTION [FUNCTION...]
其中,FUNCTION為函數ID,多個函數ID以空格間隔。
- 移除函數 使用如下命令移除一個或多個函數。
lectl fc remove FUNCTION [FUNCTION...]
其中,FUNCTION為函數ID,多個函數ID以空格間隔。
- 重置部署 使用如下命令重置部署。
lectl fc reset
管理流數據分析
您可以在Link IoT Edge專業版(LE Pro)中使用lectl工具管理流數據分析。
- 顯示信息 可通過lectl sc show命令查看當前系統流數據任務狀態。
表 13. 字段說明 選項名稱 描述 ID 流數據任務ID。 Name 流數據任務名稱。 Running 流數據任務是否正在運行。 SQLPath SQL語句文件路徑。 SQLMd5 SQL語句文件MD5值。 LogPath 流數據任務日志路徑。 BlinkJobId 流數據任務在Blink中對應的任務ID。 - 啟動流數據任務 使用如下命令啟動一個或多個流數據任務。
lectl sc start STREAM [STREAM...]
其中,STREAM為流數據任務ID,多個流數據任務ID以空格間隔。
- 停止流數據任務 使用如下命令停止一個或多個流數據任務。
lectl sc stop STREAM [STREAM...]
其中,STREAM為流數據任務ID,多個流數據任務ID以空格間隔。
- 驗證SQL 將SQL語句保存到指定文件,并執行如下命令驗證流數據任務的SQL語句是否正確。
lectl sc checksql FILE
管理遠程服務
您可以通過rom子命令,管理Link IoT Edge的遠程服務相關信息。
執行如下命令,可以顯示遠程服務當前狀態。
lectl rom show
選項名稱 | 描述 |
ChannelState | 遠程服務的通道連接狀態。 |
ThreadState | 遠程服務線程狀態。 |
Services | 遠程服務列表及其狀態。 |
管理MQTT
您可以通過mqtt子命令,管理Link IoT Edge組件的MQTT消息訂閱。
執行如下命令,可以顯示Link IoT Edge組件的消息訂閱。
lectl mqtt show
選項名稱 | 描述 |
Topic | 消息訂閱的主題。 |
QoS | 服務質量,對應MQTT協議QoS。 |
Subscriber | 消息的訂閱者。 |
State | 消息的訂閱狀態。 |
Time | 消息的訂閱時間。 |