SAS Viya

SAS Viya (57)

教學目標

初步了解部署 SAS Visual Investigator 基本概念。

重點概念

首先在金融犯罪領域最常見的模型調整過程就是抽樣資料之後交給主題專家進行處理,以確定活動是否可疑,建立這些目標價值是調整模型的關鍵組成部分,能夠產生更有效和有效的模型,以利避免詐欺活動和識別恐怖主義融資活動,此外提供過程的可追溯性以建立模型的門檻值和權重對於檢測可疑活動的受管制方面至關重要,而 SAS Visual Investigator 不僅提供了一個用於資料探索和分析的強大功能之外,更能夠透過附加的工作流程實現分析。

接著當我們開始要將 SAS Visual Investigator 部署至 IT 內部環境時,若僅執行 SAS Viya Infrastructure Resource Kit (VIRK) 中的 Pre-installation Playbook 驗證部署環境,則在執行部署的 Ansible Playbook 時,則會發生 Elasticsearch 服務會無法啟動的問題,為了解決此問題第一步驟我們會先查詢「/opt/sas/viya/config/var/log/svi-elasticsearch/sas-elasticsearch.log」記錄檔中的錯誤訊息,第二步驟我們根據錯誤訊息推斷可能造成無法啟動 Elasticsearch 服務的根本原因,根據「max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]」錯誤訊息我們將能夠推斷需要設定「vm.max_map_count」值為「263144」,第三步驟我們執行解決根本原因的指令「sudo sysctl -w vm.max_map_count=262144」,請注意此指令設定當重新開機之後就會重置為 65530,所以需要將此指令加入至 Linux 的啟動流程中,當我們完成以上三個步驟之後,理應就能夠執行部署的 Ansible Playbook 順利部署完成 SAS Visual Investigator。

查詢無法啟動 Elasticsearch 服務的錯誤訊息

1
2
3
4
5
6
7
# cd /opt/sas/viya_1552532409/config/var/log/svi-elasticsearch
# vi sas-elasticsearch.log

[ERROR][o.e.b.Bootstrap ] [BGFsX7P] node validation exception
[1] bootstrap checks failed
[1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

解決無法啟動 Elasticsearch 服務的問題

1
# sudo sysctl -w vm.max_map_count=262144

再來 SAS Visual Investigator 主要是基於 SAS Viya 強大分散式資料處理和 Elasticsearch 強大的全文搜尋功能,因此我們不僅能夠部署至一台伺服器之外能夠根據客戶不同的需求,更能夠根據客戶需求將 CAS Worker、RabbitMQ、Elasticsearch Master、Elasticsearch Data 和 Postgres 分別部署至不同伺服器中進行分散式處理和提供高可用性的服務,其中我們需要特別修改 inventory.ini 和 vars.yml 兩個設定檔。 inventory.ini 設定檔重點在於 ElasticSearch_IsMaster=true 代表部署 Elasticsearch Master,ElasticSearch_IsData=true 代表部署 Elasticsearch Data,當然我們也能夠在同一台伺服器同時設定 ElasticSearch_IsMaster=true 和 ElasticSearch_IsData=true 代表同時部署 Elasticsearch Master 和 Elasticsearch Data 至同一台伺服器中,至於 Postgres 資料庫,則需要同時修改 [pgpoolc] 和 [sasdatasvrc] 設定,以及修改 vars.yml 設定檔中的「INVOCATION_VARIABLES」,否則在自動化部署時會出現「Please add sasdatasvrc variable definitions for the system named ‘XXX’」的錯誤訊息。

inventory.ini 設定檔

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

[sas-casserver-worker]
casworker

[elasticsearch]
elasticmaster ElasticSearch_IsMaster=true ElasticSearch_IsData=false ElasticSearch_HeapSize=8g ElasticSearch_QueueSize=1000
elasticdata ElasticSearch_IsMaster=false ElasticSearch_IsData=true ElasticSearch_HeapSize=8g ElasticSearch_QueueSize=1000

[rabbitmq]
rabbitmq

[pgpoolc]
postgresql

[sasdatasvrc]
postgresql

vars.yml 設定檔

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

INVOCATION_VARIABLES:
postgresql:
pgpoolc:
- PCP_PORT: '5430'
PGPOOL_PORT: '5431'
SANMOUNT: '{{ SAS_CONFIG_ROOT }}/data/sasdatasvrc'
SERVICE_NAME: postgres
sasdatasvrc:
- NODE_NUMBER: '0'
NODE_TYPE: P
PG_PORT: '5432'
SANMOUNT: '{{ SAS_CONFIG_ROOT }}/data/sasdatasvrc'
SERVICE_NAME: postgres

最後當我們部署完成 SAS Visual Investigator 之後,請先透過「/etc/init.d/sas-viya-all-services status」指令確認 SAS Visual Investigator 直接相關的關鍵服務皆有正常啟動,否則就會發生能夠登入至 SAS Visual Investigator 中,但是會發生伺服器錯誤的訊息,導致無法正常進行操作。至於 Postgres 主要是設定每個微服務的相關設定、警示訊息、內部實體、歷史選擇關係、附件檔案以及稽核記錄。

服務名稱 描述
svi-ai Visual Investigator 分析和索引服務,主要將 CSV 檔案導入至 Postgres 資料庫中的 AIUSERDATA Schema 中,並且在 Data Hub 中進行註冊。
svi-alert Visual Investigator 警示服務,主要接受警示事件和情境觸發事件,並且透過領域、策略和佇列建立和更新調查警示。
svi-audit Visual Investigator 稽核服務,主要記錄在應用程式中的使用者操作,並且為管理員提供 API 以利查詢記錄稽核。
svi-datahub Visual Investigator 資料中心服務,主要提供與實體互動的服務,其中包括實體和關係設定,檢索和儲存。
svi-elasticsearch Visual Investigator 搜尋服務,主要提供用於文本,地理空間,時間和關係搜索和內容索引的服務。
svi-entity-resolution Visual Investigator 實體解析服務,主要執行實體解析的功能。
svi-feature Visual Investigator 功能服務,主要檢索使用者所有使用功能的集合。
svi-mobile Visual Investigator 行動服務,主要提供行動相關的功能服務。
svi-network-analytics Visual Investigator 網路分析服務,主要提供用於與網路連接圖相關的中心計算和圖形化等功能。
svi-sand Visual Investigator 搜尋和探索服務,主要用於在索引,搜索和提供資料可視化功能。
svi-transport Visual Investigator 傳輸服務,主要從正在執行的實例中提供設定資料的 .zip 檔案,並且接受/部署設定資料的 .zip 檔案至系統中。
svi-visual-investigator Visual Investigator 網站服務,主要提供給客戶端網頁瀏覽器的畫面。
svi-vsd-service Visual Investigator 情境服務,主要提供情境操作的相關功能。

相關資源

SAS Viya (56)

教學目標

初步了解如何以 Python 執行 SAS Viya 平台的管理命令列介面 (Command-line Interfaces, CLIs) 解決資訊單位日常維運管理的痛點。

重點概念

首先 SAS Viya 平台提供管理命令列介面 (Command-line Interfaces, CLIs),以利我們直接透過指令的方式管理 SAS Viya 平台,而非透過介面的方式,此外我們更能夠透過 Python 呼叫 CLI 進行 SAS Viya 平台的管理操作。

接著使用 SAS Viya 的管理命令列介面,必須先設定 SAS_CLI_PROFILE 環境變數,此時我們能夠透過以下指令在 Linux 作業系統中自動設定 SAS_CLI_PROFILE 環境變數。

初始設定

1
2
# cd /opt/sas/viya/home/bin/
# ./sas-admin profile init

再來我們可以透過以下 Python 程式碼以系統管理帳號與密碼登入 SAS Viya 的管理命令列介面。

授權登入

1
2
import os
os.system('/opt/sas/viya/home/bin/sas-admin auth login -u [系統管理帳號] -p [系統管理密碼] ');

最後我們就能夠透過以下 Python 程式碼以 SAS Viya 的管理命令列介面將 Anita 這個使用者加入至業務部門的客製群組中,並且列出業務部門客製群組中的前 100 位使用者。

管理操作

1
2
3
os.system('/opt/sas/viya/home/bin/sas-admin identities create-group --id salesgroup --name Salesgroup --description "業務部門"');
os.system('/opt/sas/viya/home/bin/sas-admin identities add-member --user-member-id anita --group-id salesgroup')
os.system('/opt/sas/viya/home/bin/sas-admin identities list-members --group-id salesgroup --limit 100')

執行結果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
NOTE: Grid node action status report: 1 nodes, 8 total actions executed.
Enter credentials for http://ip-xx-xx-xx-xx.ec2.internal:

Login succeeded. Token saved.
{
"description": "Custom sales group",
"id": "salesgroup",
"name": "Salesgroup",
"state": "active"
}
The group was created successfully.
anita has been added to group salesgroup
{
"items": [
{
"id": "anita",
"name": "SAS User",
"type": "user"
}
]
}

總結 SAS Viya 平台提供管理命令列介面 (Command-line Interfaces, CLIs) 理應能夠根據 IT 資訊單位維運管理的需求進行高度彈性的客製開發自動化維運管理,以利解決資訊單位日常維運管理的痛點。

相關資源

SAS Viya (55)

教學目標

初步了解如何在 SAS Viya 平台撰寫 SAS 程式碼的排程工作。

重點概念

首先在 SAS Viya 平台中我們可以透過 SAS Studio V 撰寫 SAS 程式碼,接著透過 SAS Job Execution 網站進行 SAS 程式碼的排程工作,相較於 SAS 9 平台主要是以 Workspace Server 伺服器執行 SAS 程式碼,而在 SAS Viya 平台則是以 Compute Server 伺服器執行 SAS 程式碼,至於 SAS 9 和 SAS Viya 平台的差別,請參考下表。

SAS 9 SAS Viya
Object Spawner Launcher Server + Service
Workspace Server Compute Server + Service
SAS Foundation Programming Runtime Environment (SPRE)

接著我們可以透過 SAS Job Execution 新增工作定義檔案,請注意 SAS Job Execution 必須透過網址 (https:// [SAS Viya 主機名稱] /SASJobExecution) 開啟,預設無法透過 SAS Viya 網站中的功能表開啟,之後我們需要按照以下步驟進行 SAS 程式碼的排程工作,分別為:

  1. 在 SAS Studio V 中撰寫和複製 SAS 程式碼。
  2. 在 SAS Job Execution 中建立和貼上 SAS 程式碼。
  3. 在 SAS Environment Manager 中建立排程工作。

再來目前若以 SAS Viya 平台排定特定時間執行 SAS Job Execution 中的 SAS 程式碼,但是還無法設定多個 SAS 程式碼的相依關係。但是我們則可以在工作定義中撰寫以下 SAS 程式碼,以利按照順序執行 SAS 程式碼,以及更能透過 &sysrc 等系統回傳值判斷 SAS 程式碼是否正常執行,請注意工作定義中不能夠只用「CAS CASAUTO;」,不然會發生「The request to start or connect to a session failed. Specify a UUID to connect to an existing session or specify a session name, port and host name to start a session.」錯誤訊息。

工作定義 SAS 程式碼

1
2
3
4
cas casauto host='<SAS Viya 主機名稱>' port=5570 sessopts=(caslib=Public timout=1000 locale="en_US");
filename <工作排程名稱> FILESRVC folderpath='<SAS 程式碼資料夾>' filename='<SAS 程式碼檔案名稱>';
%include <工作排程名稱> / source;
%put &syscc rc=&sysrc &syserr &syserrortext &syswarningtext;

儲存資料 SAS 程式碼

1
2
3
4
5
6
7
8
9
10
11
12
cas auto;
libname mycas cas caslib=casuser;
data mycas.cars;
set sashelp.cars;
run;
proc casutil incaslib="casuser" outcaslib="casuser";
save casdata="cars" replace;
run;
proc casutil;
droptable casdata="cars" incaslib="casuser";
run;
cas terminate;

儲存資料 SAS 程式碼 (巨集)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/* %exportFile(SAS 9 資料集, CAS 資料館, SASHDAT 檔案名稱) */
%macro exportFile(v_sasdata,v_caslib,v_casdata);
cas auto;
libname viyacas cas caslib=&v_caslib;
data viyacas.&v_casdata;
set &v_sasdata;
run;
proc casutil incaslib="&&v_caslib" outcaslib="&&v_caslib";
save casdata="&&v_casdata" replace;
run;
proc casutil;
droptable casdata="&&v_casdata" incaslib="&&v_caslib";
run;
cas terminate;
%mend;

%exportFile(sashelp.cars,casuser,cars);

當我們在 SAS Job Execution 新增完成工作定義之後,在工作定義上按右鍵選取「提交工作」就能夠立即執行工作,請注意每次提交工作系統就會在 SAS Environment Manager 中自動建立工作排程,以利後續設定時間定期執行。

最後當我們透過 SAS Job Execution 執行工作時預設則是會以「cas」系統帳號進行作業系統層的檔案存取操作,若是期望以該執行排程工作的使用者帳號進行檔案存取操作,則需要先建立「CASHostAccountRequired」群組,並且將該使用者帳號加入至該群組中,並且重新登出和登入 SAS Viya 平台,再執行工作排程就能夠以該使用者帳號進行檔案存取操作。

相關資源

SAS Viya (54)

教學目標

初步了解如何將 SAS 9 平台中的報表移轉至 SAS Viya 平台。

重點概念

首先若企業已經採用 SAS 9 平台中製作報表,此時若我們要將報表移轉至 SAS Viya 平台中,則可以透過 SAS Management Console 工具連線至 SAS 9 平台匯出報表的 spk 檔,接著再透過 SAS Viya 平台中的 SAS Environment Manager 網站匯入報表的 spk 檔,此時可能會發生無法正常匯入,請嘗試匯出報表所屬更高上層的資料夾打包為 spk 檔。

接著我們透過 SAS Viya 平台中的 SAS Environment Manager 網站中的內容匯入的過程主要有三個階段,分別為:

  1. 選取來源。
  2. 對應。
  3. 完成。

其中選取來源階段主要是選取包含要匯入之內容的 .json 或 .spk 檔,對應階段主要是我們將會需要設定報表中資料來源對應至 SAS Viya 平台中目前的 CAS 伺服器、CAS 資料館和 CAS 資料表,以利報表正常顯示,完成階段主要是顯示匯入的結果,並且產生 json 檔案。

再來當我們進行報表驗證時,將會發現有些報表無法正常顯示,請依序確認以下三件事,分別為:

  1. 確認資料來源中資料表是否有正常載入記憶體,建議先確認資料來源中是否有資料檔案。
  2. 確認篩選條件使用的資料項目是否存在,建議可以先移除所有圖表中的篩選功能。
  3. 確認自訂的資料項目是否能夠正常顯示,建議針對有問題的資料項目按右鍵進行編輯。

最後以上情況也會發生在 SAS Viya 平台報表移轉至 SAS Viya 平台報表,此外若是有無法編輯自訂的資料項目,並且導致報表中的圖表無法正常顯示,則我們就會需要重新建立與設定資料項目,因此再移轉報表之前建議先詳細列表出所有報表中所有自訂的資料項目,其類型主要有階層、自訂類別、計算項目、地理位置項目和參數。但若無法先進行詳細列表,則建議將 SAS Viya 平台安裝至另一台伺服器,以利後續針對資料項目逐一對應進行修改。

相關資源

SAS Viya (53)

教學目標

初步了解如何解決 SAS Viya 3.4 中 CAS 伺服器無法正常啟動的問題。

重點概念

首先當我們部署完成 SAS Viya 3.4 MPP 架構之後,主要會啟動 Cloud Analytics Services (CAS) 服務,以利進行分散式運算。此時可能會發生雖然 Ansible 工具部署 SAS Viya 3.4 正常完成沒有錯誤,但是以「sasboot」登入至「SAS Environment Manager」管理環境查看伺服器時,將會發現「cas-shared-default」的狀態為灰色無法進行操作,並且也無法進行資料的操作,因為無法選擇資料來源,以及無法正常查看授權產品資訊等情況發生,因此本篇文章主要就是要解決此問題。

接著我們先登入至所有 SAS Viya 伺服器,並且執行「ps aux|grep casluanch」指令確認是否每一台伺服器皆正常啟動 caslaunch 工具,若發現哪一台沒有正常啟動時,請執行「cat /etc/fstab」指令查看安裝 SAS Viya 的儲存空間是否被設定為「nosuid」,預設為「/opt/sas」,若是則請將「/opt/sas」複製至沒有設為「nosuid」的儲存空間,並且建立軟連結「/opt/sas」對應至沒有設為「nosuid」的儲存空間。

確認 caslaunch 是否正常執行

1
# ps aux|grep caslaunch

查看儲存空間是否為 nosuid

1
# cat /etc/fstab

建立對應的軟連結

1
2
3
# cp -Rp /opt/sas /sys/sas
# rm -rf /opt/sas
# ln -s /sys/sas /opt/sas

再來當我們設定完成之後我們在 SAS Viya 的「CAS Controller」伺服器執行「/etc/init.d/sas-viya-cascontroller-default restart」重新啟動 CAS 伺服器,其中包括「CAS Controller」和「CAS Worker」伺服器。至於執行相關記錄我們主要能夠查看 「/opt/sas/viya/config/var/log/cas/default」目錄中的「.log」和「.err」的記錄檔,像是若 CAS Worker 沒有正常啟動,則我們查看「caslaunchdefault_controller_daemon.log」記錄檔,則會發現「Node ‘‘ has not connected to the grid.」和「After 30 seconds nodes have not connected to the grid」的錯誤訊息。此外我們更能夠設定「/opt/sas/viya/config/etc/cas/default/logconfig.trace.xml」設定檔的記錄等級皆為「Trace」,以利查看更多執行詳細資訊,像是當我們設定記錄檔等級為「Trace」,並且重新啟動 CAS 伺服器之後,我們就能夠從「cas.log」記錄檔中查看所有 CAS 伺服器所執行「caslaunch」的完整指令,此時當我們將「caslaunch」的完整指令至對應的 CAS 伺服器執行時就能夠發現更多相關的錯誤訊息,像是以「cas」帳號執行完整指令,此時就會發現「UseHostToken specified in non-root launcher」的錯誤訊息。

重新啟動 CAS 伺服器

1
# /etc/init.d/sas-viya-cascontroller-default restart

查看 CAS 記錄檔

1
2
3
4
5
# cd /opt/sas/viya/config/var/log/cas/default
# ll -ltr
# vi cas_<yyyy-mm-dd>_<server>_<number>.log
# vi caslaunch_default_controller_daemon.log
# vi caslaunch_default_controller_daemon.err

設定 CAS 伺服器記錄檔等級

1
# vi/opt/sas/viya/config/etc/cas/default/logconfig.trace.xml

最後若還是有問題,則請設定 CAS 伺服器相關權限,透過權限的設定我們能夠了解 CAS 伺服器執行「caslaunch」工具主要是透過是以「cas」帳號 SSH 遠端無密碼連線至所有 CAS 伺服器,並且透過「root」帳號進行執行,所以若是部署的儲存空間設為「nosuid」將會導致無法正常執行。

設定 CAS 伺服器相關權限

1
2
3
4
5
6
# chown root:root /opt/sas/viya/home/SASFoundation/utilities/bin/caslaunch
# chmod u+s /opt/sas/viya/home/SASFoundation/utilities/bin/caslaunch
# chown cas:sas /opt/sas/viya/config/etc/cas/default/node.lua
# chown cas:sas /opt/sas/viya/config/etc/SASSecurityCertificateFramework/private/cas/shared/ -R
# chown cas:sas /opt/sas/viya/config/etc/SASSecurityCertificateFramework/tls/certs/cas/shared/default/ -R
# chown cas:sas /opt/sas/viya/config/etc/SASSecurityCertificateFramework/tokens/cas/shared/default/ -R

總結當我們部署 SAS Viya 3.4 時除了注意設定參數和網路連線之外,我們必須確認部署的儲存空間沒有設為「nosuid」,否則將會導致 CAS 伺服器無法正常啟動。

相關資源