SAS Viya (74)

教學目標

初步了解管理 SAS Viya 中 SAS Cloud Analytic Services 伺服器的基本概念。

重點概念

首先 SAS Viya 中的 SAS Cloud Analytic Services中的 Session 數若是過多將會導致 SAS Cloud Analytic Services 伺服器回應緩慢,此時將會造成資料和報表無法正常存取,此時我們能夠針對記錄檔的資訊調整 SAS Cloud Analytic Services 伺服器中的相關參數,像是 cas.JREOPTIONS、cas.MAXSESSIONS、cas.TIMEOUT、…等參數設定,其中 JREOPTIONS 主要是設定當啟動 SAS Cloud Analytic Services時 Java 虛擬機器 (JVM) 的相關參數,其中預設為 -Xms256m 和 -Xmx1024m,也就是啟動時會配置 256 MB 記憶體空間,而當記憶體資源不足夠時會增加至 1024 MB 記憶體空間,建議將 -Xms 和 -Xmx 調整為相同大小,像是 -Xms2048m 和 -Xmx2048m。cas.MAXSESSIONS 主要是設定平行處理 Session 數的最大數量,僅會限制非 SAS 管理者的總計 Session 連線數量,預設為 5000,代表總計 5000 個 Session 連線數量,若是設為 0 則代表無限數量。cas.TIMEOUT 主要是針對 SAS Cloud Analytic Services設定新建和存在 Session 的逾時進行設定,預設為 60,代表逾時設定為 60 秒,若是逾時到期之前建立連線,則取消逾時,否則會在逾時到期時自動終止 Session,此外當逾時設定為 0,則代表當 Session 連線數為零時會立即進行終止。

修改 SAS Cloud Analytic Services中的設定值

1
2
3
4
5
6
7
$ cd /opt/sas/viya/config/etc/cas/default/
$ vi casconfig_usermods.lua

cas.timeout=60

:wq!
$ sudo /etc/init.d/sas-viya-cascontroller-default restart

(註:修改任何設定值皆需要重新啟動「sas-viya-cascontroller-default」微服務才會生效。)

接著我們除了透過 SAS Environment Manager 管理環境針對 SAS Cloud Analytic Services 伺服器的 Session 手動刪除之外,我們也能夠透過 sas-admin 管理工具管理 SAS Cloud Analytic Services 伺服器中的 Session。

建立 sas-admin 管理工具設定檔

1
2
3
4
5
6
7
$ sudo su sas
$ cd /opt/sas/viya/home/bin
$ ./sas-admin profile init
Enter configuration options:
Service Endpoint> http://<SAS Viya IP or hostname>
Output type (text|json|fulljson)> json
Saved 'Default' profile to /home/sas/.sas/config.json.

登入 sas-admin 管理工具

1
2
3
4
5
$ ./sas-admin auth login
Enter credentials for http://<SAS Viya IP or hostname>
Userid>
Password>
Login succeeded. Token saved.

透過 sas-admin 管理工具列出伺服器中的 Session

1
2
3
4
5
6
7
8
9
10
11
12
$ ./sas-admin cas sessions list --server cas-shared-default
{
"items": [
{
"authenticationType": "OAuth",
"id": "28a23a80-2620-ed41-841c-872ba745b674",
"name": " Session:Thu Jun 6 03:01:09 2019",
"owner": "leoyeh ",
"state": "Connected",
"transactionState": ""
}
}

透過 sas-admin 管理工具列出伺服器中特定使用者的 Session

1
2
3
4
5
6
7
8
9
10
11
12
$ ./sas-admin cas sessions list --server cas-shared-default --superuser --limit 50 --owner leoyeh --sort-by state
{
"items": [
{
"authenticationType": "OAuth",
"id": "28a23a80-2620-ed41-841c-872ba745b674",
"name": " Session:Thu Jun 6 03:01:09 2019",
"owner": "leoyeh ",
"state": "Connected",
"transactionState": ""
}
}

透過 sas-admin 管理工具列出伺服器中特定關鍵字的 Session

1
2
3
4
5
6
7
8
9
10
11
12
$ ./sas-admin cas sessions list --server cas-shared-default --superuser --limit 50 --name-contains Session: --sort-by state
{
"items": [
{
"authenticationType": "OAuth",
"id": "28a23a80-2620-ed41-841c-872ba745b674",
"name": " Session:Thu Jun 6 03:01:09 2019",
"owner": "leoyeh ",
"state": "Connected",
"transactionState": ""
}
}

透過 sas-admin 管理工具列出特定 Session 的詳細資訊

1
2
3
4
5
6
7
8
9
$ ./sas-admin cas sessions show-info --superuser --session-id e38efd34-b37b-3446-97b9-1a5ab5ccb2de  --server cas-shared-default
{
"authenticationType": "OAuth",
"id": "e38efd34-b37b-3446-97b9-1a5ab5ccb2de",
"name": " Session:Thu Jun 6 03:06:24 2019",
"owner": "leoyeh",
"state": "Connected",
"transactionState": "none"
}

透過 sas-admin 管理工具刪除特定的 Session

1
2
$ ./sas-admin cas sessions delete --superuser --session-id e38efd34-b37b-3446-97b9-1a5ab5ccb2de  --server cas-shared-default -force
CAS session with ID "e38efd34-b37b-3446-97b9-1a5ab5ccb2de" has been deleted from server "cas-shared-default".

請注意當使用 —superuser 的參數時將會建立「casmanagement-cli sessions assumeSuperUser:…」的 Session,並且不會自動刪除。

再來我們除了透過 sas-admin 管理工具管理 SAS Cloud Analytic Services 伺服器中的 Session,我們更能夠撰寫腳本程式管理 SAS Cloud Analytic Services 伺服器中的 Session,像是我們能夠撰寫腳本程式刪除特定時間之前特定使用者的所有 Session。

撰寫腳本程式管理 SAS Cloud Analytic Services 伺服器中的 Session

clean_cas_sess.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#!/bin/bash
if [ $# -eq 0 ]
then
echo "No arguments supplied"
exit 0
else
sess_num=0
count=0
iskill=0

if [ $# -gt 1 ]
then
sess_info=`ps -eo user:20,pid,lstart,cmd|grep cas|grep session|grep $2|awk '{print $6,$2}'`
else
sess_info=`ps -eo user:20,pid,lstart,cmd|grep cas|grep session|awk '{print $6,$2}'`
fi

for i in $sess_info:
do
if [ "$i" == ":" ]
then
echo "No cas session"
exit 1
fi
((count+=1))
data=`echo $i | sed 's/[^0-9]//g'`
time=$1
if ((count%2==1))
then
iskill=0
((sess_num+=1))
if ((${data#0}\<${time#0}))
then
iskill=1
((sess_num-=1))
fi
else
if ((iskill==1))
then
sudo kill -9 $data
fi
fi
done
date
echo
echo "time username process_id"
ps -eo user:20,pid,lstart,cmd|grep cas|grep session|awk '{print $6,$1,$2}'
echo
echo "total cas session number:" $sess_num
fi

執行腳本程式管理 SAS Cloud Analytic Services 伺服器中的 Session

1
2
$ chmod +x clean_cas_sess.sh
$ ./clean_cas_sess.sh hhmmss [<username>]

最後當我們需要更深入了解 SAS Cloud Analytic Services 伺服器目前使用的情況,則我們能夠在「/opt/sas/viya/config/etc/cas/default/casconfig_usermods.lua 」設定檔中加入「env.CAS_START_MONITOR_UI=’true’」設定值,預設完整安裝是為 false,也就是停用,然後重新啟動「sas-viya-cascontroller-default」微服務之後,我們就能夠透過「http:///cas-shared-default-http」網址登入「CAS Server Monitor」網站即時監控 SAS Cloud Analytic Services 伺服器目前使用的情況。此外我們也能夠開啟 SAS Viya 平台中「SAS 內容」 ->「Products」 -> 「SAS Environment Manager」->「Dashboard Items」 -> 「CAS Activity」預設報表查看 SAS Cloud Analytic Services 伺服器過去使用的情況,主要包括 CPU、執行緒、記憶體、I/O、…等相關資訊,並且能夠直接將所有相關圖表和表格資訊個別匯出為 Excel 檔案,以利進行事後分析。

相關資源