SAS 教學

SAS 系統管理 (103)

教學目標

初步了解如何解決 SAS Enterprise Guide 長時間處理大量資料發生連線中繼的錯誤問題。

重點概念

首先在企業使用 SAS 軟體的我們習慣透過 SAS Enterprise Guide 整理資料,並且產生 SAS 資料集,以利進行統計分析或模型建立等資料科學人工智慧相關實務應用,但是關鍵在於資料且是大量的資料,此時就會發生當 SAS Enterprise Guide 執行 SAS 程式碼超過半小時以上的時間之後,我們將會發生非預期的錯誤無法針對所要求的資源建立連線導致無法正常產生分析結果的資料表,這將會對於業務單位使用 SAS Enterprise Guide 時造成很大的困擾。

接著我們要如何解決上述問題呢?一開始我們先了解 SAS Enterprise Guide 無法在沒有使用者操作的情況下啟動中斷連線,但是有幾種情況可能會造成連線中繼,主要有三種,分別為:

  1. 網路不穩定 (Network instability):如果客戶端和伺服器之間傳輸的資料包遺失,此時 SAS Enterprise Guide 與 SAS Metadata Server 之間的連線可能會被切斷,從而產生先前描述的錯誤。
  2. 防火牆超時 (Firewall time-outs):當連線保持空閒狀態時,可能會由防火牆中繼空閒連線,如果長時間執行的作業始突然中繼連線,或者 SAS Enterprise Guide 長時間處於打開狀態,則中斷連線將可能來自於防火牆使用空閒連線超時的設定。
  3. 工作站上設定省電模式 (Power-saving modes set on the workstation):Windows 作業系統個人電腦在指定的不活動時段內進入低功耗狀態的情況,這種行為經常發生在筆記本電腦上,如果執行 SAS Enterprise Guide 的個人電腦進入低功耗狀態,則可能已禁用網路卡以節省電量,此時若發生這種情況 SAS Enterprise Guide 與中繼資料伺服器之間的連線將會遺失。

而 SAS Enterprise Guide 主要連線兩個連接埠,分別為中繼資料伺服器 (8561) 和工作區伺服器 (8591),當作業運行很長時間時,雖然 SAS Enterprise Guide 和中繼資料伺服器和工作區伺服器在連接埠上連線保持活動狀態。但是中繼資料伺服器連接埠在作業執行時處於空閒狀態,如果設定傳輸控制協議(TCP)超時以中斷空閒連接,則會中斷它,如果防火牆是中斷連線的根因,則可以透過增加為防火牆設置的超時間隔來阻止中斷連線的發生。

再來我們可以在工作區伺服器上設定 keepalive 參數,以利確保防火牆不會中斷不活動的已連接的客戶端, 所謂 keepalive 參數主要是定期向非活動的客戶端發送事件包,以防止網路防火牆中斷連線,其中事件包的間隔主要以秒為單位,最小值為 30 秒,零值將關閉 keepalive 參數,至於修改步驟為:

  1. 開啟「SAS Management Console」工具,登入「sasadm@saspw」帳號密碼。
  2. 在「Server Manager」->「SASApp」->「SASApp - Logical Workspace Server」上按右鍵選擇「Properties」。
  3. 在「Option server parameters」參數中輸入「keepalive=300」代表每五分鐘發送事件包防止網路防火牆中斷連線,按下「OK」。

當設定完成上述設定之後,我們需要關閉再重新啟動 SAS Enterprise Guide 才會生效,以利我們透過 SAS Enterprise Guide 長時間處理大量資料,此外請注意最新版本的 SAS Enterprise Guide,現在預設超時為 30 分鐘,所以 keeplive 的時間必須小於 30 分鐘,至於 SAS Enterprise Guide 的超時可以在 SAS Enterprise Guide 的「Options」->「Data」->「Performance」中勾選「Close data grid after period of inactivity (specify in minutes):」,輸入超時時間以分鐘為單位進行修改 。

最後 SAS Enterprise Guide 無法重新建立與中繼資料伺服器的新連線,若要維護使用者的連線,則 SAS Enterprise Guide 必須保持與中繼資料伺服器的連線,若是該連線中斷就無法重新建立連線,並且發生錯誤,以及 SAS 日誌無法提供有關中斷原因的任何資訊,因為當連線中斷時 SAS 日誌只能顯示連線已中斷。

相關資源

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 平台安裝至另一台伺服器,以利後續針對資料項目逐一對應進行修改。

相關資源