<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>working-dog Tracker</title>
    <link>https://communities.sas.com/kntur85557/tracker</link>
    <description>working-dog Tracker</description>
    <pubDate>Sat, 04 Apr 2026 04:14:44 GMT</pubDate>
    <dc:date>2026-04-04T04:14:44Z</dc:date>
    <item>
      <title>Re: how to copy viya 4.x  studio .flw file from NFS to SAS content</title>
      <link>https://communities.sas.com/t5/SAS-Programming/how-to-copy-viya-4-x-studio-flw-file-from-NFS-to-SAS-content/m-p/960525#M374617</link>
      <description>&lt;P&gt;Not a timely response, but I too have looked into how to copy dataFlow and will comment on the results.&lt;/P&gt;
&lt;P&gt;I was able to save the flow as a file using PROC HTTP. Here is a sample code of it.&lt;/P&gt;
&lt;PRE&gt;/* Copy dataFlow to the directory */
%macro copyDataFlow(uri=, to=);
  %global rc;
  %local fref url n;
  
  %let rc=1;
  %let n=%sysfunc(monotonic());  
  %let fref=_LF%sysfunc(putn(&amp;amp;n, z5.));
  %let url=%sysfunc(getoption(SERVICESBASEURL))&amp;amp;uri;
    
  /* Assign file reference name. */
  filename &amp;amp;fref "&amp;amp;to" encoding='UTF-8';
  %if &amp;amp;sysfilrc^=0 &amp;amp; &amp;amp;sysfilrc^=1 %then %return;

  proc http method="GET" oauth_bearer=sas_services out=&amp;amp;fref url="&amp;amp;url";
  run;
  
  %if &amp;amp;SYS_PROCHTTP_STATUS_CODE=200 %then %do;
    %let rc=0;
  %end;
  
  filename &amp;amp;fref clear;
%mend;&lt;BR /&gt;&lt;BR /&gt;%copyDataFlow(uri=&lt;SPAN&gt;/dataFlows/dataFlows/a96a3d9d-61cd-4f18-bdca-4149251f3d5a, to=/tmp/sample.flw);&lt;/SPAN&gt;&lt;/PRE&gt;</description>
      <pubDate>Fri, 28 Feb 2025 15:04:45 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/how-to-copy-viya-4-x-studio-flw-file-from-NFS-to-SAS-content/m-p/960525#M374617</guid>
      <dc:creator>working-dog</dc:creator>
      <dc:date>2025-02-28T15:04:45Z</dc:date>
    </item>
    <item>
      <title>Re: Rake is a custom step and macro to extract Viya logs</title>
      <link>https://communities.sas.com/t5/SAS-Communities-Library/Rake-is-a-custom-step-and-macro-to-extract-Viya-logs/tac-p/954670#M10028</link>
      <description>&lt;P&gt;Rake has been modified and a new ZIP file is attached.&lt;BR /&gt;The modification adds the ability to update configuration file credentials and OpenSearch URLs from the Custom Steps screen.&lt;/P&gt;</description>
      <pubDate>Fri, 27 Dec 2024 06:28:18 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Communities-Library/Rake-is-a-custom-step-and-macro-to-extract-Viya-logs/tac-p/954670#M10028</guid>
      <dc:creator>working-dog</dc:creator>
      <dc:date>2024-12-27T06:28:18Z</dc:date>
    </item>
    <item>
      <title>Rake is a shell script  to extract Viya logs</title>
      <link>https://communities.sas.com/t5/SAS-Communities-Library/Rake-is-a-shell-script-to-extract-Viya-logs/ta-p/951088</link>
      <description>&lt;DIV class="lia-message-template-content-zone"&gt;
&lt;H1&gt;Overview of rake-cli&lt;/H1&gt;
&lt;P&gt;rake(aka kumade) is a script for extracting logs from SAS Viya Monitoring for Kubernetes.&amp;nbsp;The name of the script, rake, is named after a tool used to collect fallen leaves. You can change the name of the script to kumade, râteau, Rechen, rastrello, pá zi, or whatever you like to make it easier to remember.&amp;nbsp;&lt;SPAN&gt;I created the script based on &lt;A title="Rake custom step" href="https://communities.sas.com/t5/SAS-Communities-Library/Rake-is-a-custom-step-and-macro-to-extract-Viya-logs/ta-p/937739" target="_self"&gt;a custom step&lt;/A&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN&gt;I created.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H1&gt;Purpose&lt;/H1&gt;
&lt;P&gt;rake was created to simplify log extraction from SAS Viya Monitoring for Kubernetes. OpenSearch has a 10,000-record limit for log extraction, making it difficult to retrieve logs before and after an error in a single operation. `rake` overcomes this 10,000-record limit, extracting logs within a specified time range.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;To assist SAS Viya system administrators in error investigation.&lt;/LI&gt;
&lt;LI&gt;To extract logs from OpenSearch within a specified range.&lt;/LI&gt;
&lt;LI&gt;To extract logs in a format importable into Excel.&lt;/LI&gt;
&lt;LI&gt;To easily identify common errors.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H2&gt;Features&lt;/H2&gt;
&lt;P&gt;rake offers the following features:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&amp;nbsp;Extracts more than 10,000 lines of logs from OpenSearch in JSON or CSV format from a Linux terminal.&lt;/LI&gt;
&lt;LI&gt;Automatically creates a configuration file template on the first run.&lt;/LI&gt;
&lt;LI&gt;Extracts logs from the last 5 minutes if no arguments are provided.&lt;/LI&gt;
&lt;LI&gt;Allows specifying date and time using formats like E8601DT32.3, `now`, `now-3h`, etc.&lt;/LI&gt;
&lt;LI&gt;Extracts only feeds frequently referenced during investigations.&lt;/LI&gt;
&lt;LI&gt;&amp;nbsp;Outputs logs in JSON or CSV format.&lt;/LI&gt;
&lt;LI&gt;Adds fields to the output file including day, time, minute, second, and checks for common error patterns.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H1&gt;Introduction&lt;/H1&gt;
&lt;P&gt;This section describes the prerequisites, placement, and configuration file for the script.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H2&gt;Prerequisites&lt;/H2&gt;
&lt;P&gt;This section lists the required environment and configuration information to run the script.&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Environment
&lt;UL&gt;
&lt;LI&gt;SAS Viya&lt;/LI&gt;
&lt;LI&gt;SAS Viya Monitoring for Kubernetes&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;LI&gt;Commands&lt;BR /&gt;
&lt;UL&gt;
&lt;LI&gt;bash&lt;/LI&gt;
&lt;LI&gt;jq&lt;/LI&gt;
&lt;LI&gt;curl&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;LI&gt;Configuration&lt;BR /&gt;
&lt;UL&gt;
&lt;LI&gt;OpenSearch URL and api path&lt;/LI&gt;
&lt;LI&gt;OpenSearch username and password&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H2&gt;Deployment&lt;/H2&gt;
&lt;P&gt;Place the rake script in one of the following paths and set execution permissions using `chmod +x`:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;$HOME/bin/rake&lt;/LI&gt;
&lt;LI&gt;/usr/local/bin/rake&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H2&gt;Configuration File Creation and Editing&lt;/H2&gt;
&lt;P&gt;After placing the script, run `rake` without arguments to create the configuration file. A template configuration file will be created if one doesn't exist.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;$HOME/.rake/config.json&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;Edit the configuration file to set the OpenSearch username, password, and OpenSearch endpoint. Modify the `api` value if a 404 Not Found error occurs during script execution.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;endpoint&lt;/LI&gt;
&lt;LI&gt;api&lt;/LI&gt;
&lt;LI&gt;user&lt;/LI&gt;
&lt;LI&gt;passwd&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;After editing the configuration, running `rake` without arguments will extract logs from the last 5 minutes. If unable to connect to the server or if the username/password is incorrect, an error message will be displayed. Correct the values in the configuration file based on the error message. File permissions will be changed after each script execution to protect the password.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H2&gt;Error Patterns&lt;/H2&gt;
&lt;P&gt;Common error patterns are registered in the `"default"."queries"` array of the configuration file. Pattern matching is performed in the order defined in the `queries` array.&lt;/P&gt;
&lt;P&gt;This feature facilitates easier error identification by matching extracted logs against these patterns. Users can add patterns by modifying the configuration file. Note that characters requiring escaping in JSON format cannot be used in patterns due to formatting constraints.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H2&gt;Configuration File Example&lt;/H2&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;LI-CODE lang="json"&gt;{
  "default": {
    "endpoint": "https://osd.example.com",
    "api": "api/console/proxy",
    "user": "admin",
    "passwd": "password",
    "queries": [
      "The system has encountered an unhandled Exception",
      "ObjectOptimisticLockingFailureException",
      "ODBC SQL Server Wire Protocol driver",
      "Error creating compute session",
      "Error stopping CAS session",
      "Child terminated by signal",
      "ServerOperationException",
      "OAuth token is expired",
      "Unable to launch node",
      "JobExecutionException",
      "Internal Server Error",
      "Unhandled Exception",
      "SAS/TK is aborting",
      "Java heap space",
      "out of memory",
      "OutOfMemory",
      "Unexpected",
      "SSL error",
      "Exception",
      "Failure",
      "killed",
      "panic",
      "OOM"
    ]
  }
}&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H1&gt;Functionality&lt;/H1&gt;
&lt;P&gt;This describes how to run `rake`, its arguments, and the output file format.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H2&gt;Example Execution&lt;/H2&gt;
&lt;P&gt;rake is designed to run with default options.&lt;/P&gt;
&lt;LI-CODE lang="shell"&gt;$ rake
Processing...
Extracted 4582 logs from the range now-5m to now.
Saved the logs in the following file.
-rw-rw-r-- 1 azureuser azureuser 2403970 Nov 15 00:19 /tmp/rake.20241115.001936.json
&lt;/LI-CODE&gt;
&lt;H2&gt;&amp;nbsp;&lt;/H2&gt;
&lt;H2&gt;Example Options&lt;/H2&gt;
&lt;P&gt;Examples are shown before the option descriptions.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;TABLE border="1" width="100%"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="50%"&gt;rake&lt;/TD&gt;
&lt;TD width="50%"&gt;Extracts logs from the last 5 minutes.&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="50%"&gt;rake -h&amp;nbsp;&lt;/TD&gt;
&lt;TD width="50%"&gt;Displays help.&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="50%"&gt;rake -f now-10m&amp;nbsp;&lt;/TD&gt;
&lt;TD width="50%"&gt;Extracts logs from the last 10 minutes.&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="50%"&gt;rake -f 2024-11-01T12:00:00 -t now-1h&lt;/TD&gt;
&lt;TD width="50%"&gt;Extracts logs from the specified range.&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="50%"&gt;rake -c -o /tmp/foo.csv&lt;/TD&gt;
&lt;TD width="50%"&gt;Saves logs to `/tmp/foo.csv` in CSV format.&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="50%"&gt;rake -f now-1w -m "SAS/TK is aborting"&lt;/TD&gt;
&lt;TD width="50%"&gt;Extracts logs from the last week containing the specified string.&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H2&gt;&amp;nbsp;Options&lt;/H2&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;-f _date/time_&lt;/H3&gt;
&lt;P&gt;Specifies the start point for log extraction. The default value is now-5m. Acceptable date/time formats are shown below:&lt;/P&gt;
&lt;TABLE border="1" width="100%"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="50%"&gt;2024-11-14T13:00:15&amp;nbsp;&lt;/TD&gt;
&lt;TD width="50%"&gt;Local date/time&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="50%"&gt;2024-11-14T04:00:15Z&lt;/TD&gt;
&lt;TD width="50%"&gt;UTC date/time&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="50%"&gt;now&lt;/TD&gt;
&lt;TD width="50%"&gt;Current time&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="50%"&gt;now-30s&lt;/TD&gt;
&lt;TD width="50%"&gt;30 seconds ago&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="50%"&gt;now-1m&lt;/TD&gt;
&lt;TD width="50%"&gt;1 minute ago&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="50%"&gt;now-1h&lt;/TD&gt;
&lt;TD width="50%"&gt;1 hour ago&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="50%"&gt;now-1d&lt;/TD&gt;
&lt;TD width="50%"&gt;1 day ago&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;now-1w&lt;/TD&gt;
&lt;TD&gt;1 week ago&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;now-1M&lt;/TD&gt;
&lt;TD&gt;1 month ago&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;now-1y&lt;/TD&gt;
&lt;TD&gt;1 year ago&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;H3&gt;-t _date/time_&lt;/H3&gt;
&lt;P&gt;Specifies the end point for log extraction. The default value is now. Acceptable formats are the same as the -f option.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;-o _output_&lt;/H3&gt;
&lt;P&gt;Specifies the output filename. The default filename is created under /tmp based on a timestamp.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;-c&lt;/H3&gt;
&lt;P&gt;Changes the output file format to CSV. The default output format is JSON.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;-m _text_&lt;/H3&gt;
&lt;P&gt;Specifies the text to be included in the .message field as a log extraction condition. This option is useful for capturing specific error messages over a relatively long period. Special characters requiring escaping in JSON format (double quotes, {}, [], |) cannot be specified.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;-e _endpoint_&lt;/H3&gt;
Specifies a value to override the endpoint in config.json.&lt;/DIV&gt;
&lt;DIV class="lia-message-template-content-zone"&gt;
&lt;H3&gt;&amp;nbsp;-u _user_&lt;/H3&gt;
&lt;P&gt;Specifies a value to override the user in config.json.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;-p _password_&lt;/H3&gt;
&lt;P&gt;Specifies a value to override the passwd in config.json.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;-l _limit_&lt;/H3&gt;
&lt;P&gt;Specifies the maximum number of times to call the OpenSearch API. The default is 100.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;-h&lt;/H3&gt;
&lt;P&gt;Displays usage information.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H2&gt;Output File&lt;/H2&gt;
&lt;P&gt;The output file content is sorted in ascending order by timestamp.&lt;BR /&gt;The output file format is either JSON or CSV. Both formats can be imported using Excel's "Text or CSV from". The output file items are shown below:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;_index&lt;/LI&gt;
&lt;LI&gt;_id&lt;/LI&gt;
&lt;LI&gt;&lt;A href="mailto:_source.@timestamp" target="_blank" rel="noopener"&gt;_source.@timestamp&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;Hour of @timestamp&lt;/LI&gt;
&lt;LI&gt;Minute of @timestamp&lt;/LI&gt;
&lt;LI&gt;Second of @timestamp&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;_source.logsource&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;&amp;nbsp;_source.level&lt;/LI&gt;
&lt;LI&gt;&amp;nbsp;_source.kube.pod&lt;/LI&gt;
&lt;LI&gt;&amp;nbsp;_source.kube.container&lt;/LI&gt;
&lt;LI&gt;_source.message&lt;/LI&gt;
&lt;LI&gt;&amp;nbsp;_source.properties.username&lt;/LI&gt;
&lt;LI&gt;_source.kube.labels.launcher_sas_com/username&lt;/LI&gt;
&lt;LI&gt;_source.kube.labels.launcher_sas_com/requested-by-client&lt;/LI&gt;
&lt;LI&gt;Number of matching patterns in message&lt;/LI&gt;
&lt;LI&gt;Pattern from config file matched with message&lt;/LI&gt;
&lt;LI&gt;sort&lt;/LI&gt;
&lt;/UL&gt;
&lt;H1&gt;Development Notes&lt;/H1&gt;
&lt;P&gt;Developer notes are documented here.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H2&gt;Test Environment&lt;/H2&gt;
&lt;P&gt;- SAS Viya LTS 2024.03&lt;BR /&gt;- SAS Viya Monitoring for Kubernetes 1.2.26&lt;BR /&gt;- OpenSearch 2.12.0&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H2&gt;Troubleshooting&lt;/H2&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;404 Not Found&lt;/H3&gt;
&lt;P&gt;If the OpenSearch hostname is correct but the request path doesn't exist, modify the `api` value in `config.json`.&lt;BR /&gt;To find the correct values, use OpenSearch Dev Tools and your browser's developer tools (F12) together.&lt;BR /&gt;Open Dev Tools and display the browser's developer tools. Run the following query from the Dev Tools Console:&lt;/P&gt;
&lt;LI-CODE lang="json"&gt;GET viya_logs-*/_search
{
"query": {
"match_all": {}
}
}&lt;/LI-CODE&gt;
&lt;P&gt;&lt;BR /&gt;Select the request from the Network tab of the developer tools. The `Headers/Request URL:` will show the endpoint and `api` values to specify in `config.json`. Depending on the version of OpenSearch, the Copy as cURL feature may be available at times.&lt;/P&gt;
&lt;P&gt;In some environments, the protocol was HTTP instead of HTTPS, and the API path was sometimes dashboards/api/console/proxy instead of api/console/proxy.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H2&gt;Testing&lt;/H2&gt;
&lt;P&gt;Normal and error test patterns are stored in test/test.sh. When developers modify the script, they should run the test patterns to check that it is working correctly.&lt;/P&gt;
&lt;/DIV&gt;</description>
      <pubDate>Mon, 18 Nov 2024 14:31:07 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Communities-Library/Rake-is-a-shell-script-to-extract-Viya-logs/ta-p/951088</guid>
      <dc:creator>working-dog</dc:creator>
      <dc:date>2024-11-18T14:31:07Z</dc:date>
    </item>
    <item>
      <title>Rake is a custom step and macro to extract Viya logs</title>
      <link>https://communities.sas.com/t5/SAS-Communities-Library/Rake-is-a-custom-step-and-macro-to-extract-Viya-logs/ta-p/937739</link>
      <description>&lt;DIV class="lia-message-template-content-zone"&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-left" image-alt="october (3).png" style="width: 200px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/98915i09AEE7E862578B70/image-size/small?v=v2&amp;amp;px=200" role="button" title="october (3).png" alt="october (3).png" /&gt;&lt;/span&gt;&lt;STRONG&gt;Rake is a macro and Custom Step to easily extract OpenSearch logs.&lt;/STRONG&gt;&lt;BR /&gt;&lt;BR /&gt;This post is for those who are collecting and investigating Viya4 logs. I have created a custom step for users of SAS Viya Monitoring for Kubernetes to easily extract logs from SAS Studio. The name of this custom step is Rake (aka Kumade). The name comes from the rake that collects fallen leaves. The Rake has the following characteristics.&amp;nbsp;If you prefer Bash to SAS Studio, there is also a &lt;A href="https://communities.sas.com/t5/SAS-Communities-Library/Rake-is-a-shell-script-to-extract-Viya-logs/ta-p/951088" target="_self"&gt;shell script version of Rake.&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Run a macro from SAS Studio to extract more than 10,000 logs from OpenSearch.&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;If the output argument is omitted, logs are output as a data set in WORK.LOG.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;If the log extraction period argument is omitted, logs are extracted from 15 minutes ago to the present.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;After the logs are extracted into a data set, FREQ or SGPLOT aggregates the logs and outputs the results.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;Date and time can be specified in E8601DT32.3 format, now, now-3h, etc.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;Check for common error patterns, count the number of cases, and set a flag on the output.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;Encodes username and password and stores them in a configuration file.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;/DIV&gt;
&lt;P class="lia-message-template-content-zone"&gt;&amp;nbsp;&lt;/P&gt;
&lt;H1 class="lia-message-template-content-zone"&gt;Prerequisite&lt;/H1&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;UL&gt;
&lt;LI class="lia-message-template-content-zone"&gt;The custom steps have been tested on LTS 2023.03 and LTS 2024.03.&lt;/LI&gt;
&lt;LI class="lia-message-template-content-zone"&gt;If you use it with other versions, please test it.&lt;/LI&gt;
&lt;LI class="lia-message-template-content-zone"&gt;SAS Viya Monitoring for Kubernetes must be installed in order to run.&lt;/LI&gt;
&lt;LI class="lia-message-template-content-zone"&gt;An OpenSearch user and password are required.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H1&gt;How to use&lt;/H1&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Open SAS Studio and place the Rake.step file in the SAS Contents folder. Open the OpenSearch Login section for the first time and enter your username and password. Click Run to execute the custom step. The first run with default settings extracts the last 15 minutes of logs and creates a configuration file in My Folder. The second and subsequent runs will access OpenSearch using the encoded username and password stored in the configuration file.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Rake1.png" style="width: 999px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/98866i0A6AA6DE9706EB09/image-size/large?v=v2&amp;amp;px=999" role="button" title="Rake1.png" alt="Rake1.png" /&gt;&lt;/span&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Rake2.png" style="width: 999px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/98867iD1328D26BE92EDFB/image-size/large?v=v2&amp;amp;px=999" role="button" title="Rake2.png" alt="Rake2.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The custom steps and their built-in macros are implemented to work without parameters as much as possible. Of course, you can explicitly specify the time period for which the logs should be extracted. There are several options that can be found in the custom step UI. Seeing is believing.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H2&gt;Results&lt;/H2&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;There are two types of information output in the SAS Studio results: lists with macro arguments and execution time information, and frequency totals and plots. An example screen is shown below. The purpose of the frequency summaries and plots is to provide indications of errors from the extracted logs by date/time, container, level and type of client, and so on. Detailed descriptions are omitted, but reference is made to this as a means of exploring the logs.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Rake3.png" style="width: 999px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/98868i1B8A7680BD3D7BD3/image-size/large?v=v2&amp;amp;px=999" role="button" title="Rake3.png" alt="Rake3.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H2&gt;Output data&lt;/H2&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The screenshot below shows that WORK.LOG is filtered by multiple criteria; the filter function in SAS Studio makes it easy to search for a specific log. When a message stored in WORK.LOG contains certain characters, the Check variable is set to a number. This number indicates the pattern of the string.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Rake4.png" style="width: 999px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/98869iCBF4B266AE367C62/image-size/large?v=v2&amp;amp;px=999" role="button" title="Rake4.png" alt="Rake4.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;WORK.LOG Columns&lt;/H3&gt;
&lt;P&gt;The only variables output to WORK.LOG are fields that are commonly referenced in OpenSearch; the definitions of the variables in WORK.LOG are shown below.&lt;/P&gt;
&lt;TABLE style="width: 100%;" border="1" width="100%"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="16.666666666666668%"&gt;Colum Name&lt;/TD&gt;
&lt;TD width="16.666666666666668%"&gt;Label&lt;/TD&gt;
&lt;TD width="16.666666666666668%"&gt;Type&lt;/TD&gt;
&lt;TD width="16.666666666666668%"&gt;Length&lt;/TD&gt;
&lt;TD width="16.666666666666668%"&gt;Format&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="16.666666666666668%"&gt;timestamp&lt;/TD&gt;
&lt;TD width="16.666666666666668%"&gt;timestamp&amp;nbsp;%sysfunc(getoption(tz))&lt;/TD&gt;
&lt;TD width="16.666666666666668%"&gt;Numeric&lt;/TD&gt;
&lt;TD width="16.666666666666668%"&gt;8&lt;/TD&gt;
&lt;TD width="16.666666666666668%"&gt;E8601DT23.3&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="16.666666666666668%"&gt;hour&lt;/TD&gt;
&lt;TD width="16.666666666666668%"&gt;hour(timestamp)&lt;/TD&gt;
&lt;TD width="16.666666666666668%"&gt;Numeric&lt;/TD&gt;
&lt;TD width="16.666666666666668%"&gt;8&lt;/TD&gt;
&lt;TD width="16.666666666666668%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="16.666666666666668%"&gt;minute&lt;/TD&gt;
&lt;TD width="16.666666666666668%"&gt;minute(timestamp)&lt;/TD&gt;
&lt;TD width="16.666666666666668%"&gt;Numeric&lt;/TD&gt;
&lt;TD width="16.666666666666668%"&gt;8&lt;/TD&gt;
&lt;TD width="16.666666666666668%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="16.666666666666668%"&gt;second&lt;/TD&gt;
&lt;TD width="16.666666666666668%"&gt;second(timestamp)&lt;/TD&gt;
&lt;TD width="16.666666666666668%"&gt;Numeric&lt;/TD&gt;
&lt;TD width="16.666666666666668%"&gt;8&lt;/TD&gt;
&lt;TD width="16.666666666666668%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="16.666666666666668%"&gt;check&lt;/TD&gt;
&lt;TD width="16.666666666666668%"&gt;The number of the matched pattern&lt;/TD&gt;
&lt;TD width="16.666666666666668%"&gt;Numeric&lt;/TD&gt;
&lt;TD width="16.666666666666668%"&gt;8&lt;/TD&gt;
&lt;TD width="16.666666666666668%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="16.666666666666668%"&gt;utc&lt;/TD&gt;
&lt;TD width="16.666666666666668%"&gt;UTC timestamp&lt;/TD&gt;
&lt;TD width="16.666666666666668%"&gt;Character&lt;/TD&gt;
&lt;TD width="16.666666666666668%"&gt;32&lt;/TD&gt;
&lt;TD width="16.666666666666668%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="16.666666666666668%"&gt;id&lt;/TD&gt;
&lt;TD width="16.666666666666668%"&gt;_id field&lt;/TD&gt;
&lt;TD width="16.666666666666668%"&gt;Character&lt;/TD&gt;
&lt;TD width="16.666666666666668%"&gt;64&lt;/TD&gt;
&lt;TD width="16.666666666666668%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="16.666666666666668%"&gt;level&lt;/TD&gt;
&lt;TD width="16.666666666666668%"&gt;level&lt;/TD&gt;
&lt;TD width="16.666666666666668%"&gt;Character&lt;/TD&gt;
&lt;TD width="16.666666666666668%"&gt;16&lt;/TD&gt;
&lt;TD width="16.666666666666668%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="16.666666666666668%"&gt;logsource&lt;/TD&gt;
&lt;TD width="16.666666666666668%"&gt;logsource&lt;/TD&gt;
&lt;TD width="16.666666666666668%"&gt;Character&lt;/TD&gt;
&lt;TD width="16.666666666666668%"&gt;64&lt;/TD&gt;
&lt;TD width="16.666666666666668%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="16.666666666666668%"&gt;container&lt;/TD&gt;
&lt;TD width="16.666666666666668%"&gt;kube.container&lt;/TD&gt;
&lt;TD width="16.666666666666668%"&gt;Character&lt;/TD&gt;
&lt;TD width="16.666666666666668%"&gt;64&lt;/TD&gt;
&lt;TD width="16.666666666666668%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="16.666666666666668%"&gt;pod&lt;/TD&gt;
&lt;TD width="16.666666666666668%"&gt;kube.pod&lt;/TD&gt;
&lt;TD width="16.666666666666668%"&gt;Character&lt;/TD&gt;
&lt;TD width="16.666666666666668%"&gt;64&lt;/TD&gt;
&lt;TD width="16.666666666666668%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="16.666666666666668%"&gt;message&lt;/TD&gt;
&lt;TD width="16.666666666666668%"&gt;message&lt;/TD&gt;
&lt;TD width="16.666666666666668%"&gt;Character&lt;/TD&gt;
&lt;TD width="16.666666666666668%"&gt;4096&lt;/TD&gt;
&lt;TD width="16.666666666666668%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="16.666666666666668%"&gt;username&lt;/TD&gt;
&lt;TD width="16.666666666666668%"&gt;kube.labels.launcher_sas_com/username&lt;/TD&gt;
&lt;TD width="16.666666666666668%"&gt;Character&lt;/TD&gt;
&lt;TD width="16.666666666666668%"&gt;32&lt;/TD&gt;
&lt;TD width="16.666666666666668%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="16.666666666666668%"&gt;client&lt;/TD&gt;
&lt;TD width="16.666666666666668%"&gt;kube.labels.launcher_sas_com/requested-by-client&lt;/TD&gt;
&lt;TD width="16.666666666666668%"&gt;Character&lt;/TD&gt;
&lt;TD width="16.666666666666668%"&gt;32&lt;/TD&gt;
&lt;TD width="16.666666666666668%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="16.666666666666668%"&gt;patterm&lt;/TD&gt;
&lt;TD width="16.666666666666668%"&gt;String retrieved from the message field&lt;/TD&gt;
&lt;TD width="16.666666666666668%"&gt;Character&lt;/TD&gt;
&lt;TD width="16.666666666666668%"&gt;132&lt;/TD&gt;
&lt;TD width="16.666666666666668%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="16.666666666666668%"&gt;n&lt;/TD&gt;
&lt;TD width="16.666666666666668%"&gt;Sequential number indicating the order&lt;/TD&gt;
&lt;TD width="16.666666666666668%"&gt;Numeric&lt;/TD&gt;
&lt;TD width="16.666666666666668%"&gt;8&lt;/TD&gt;
&lt;TD width="16.666666666666668%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H2&gt;TSV File&lt;/H2&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The contents of WORK.LOG are output to /tmp as a TSV file. The file is created with a unique name that includes a timestamp. The output folder can be changed in the Options tab.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H2&gt;Configuration file&lt;/H2&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;When a macro or custom step is run with an OpenSearch username and password, the following configuration file is created in the SAS contents. The macro creates a new configuration file if one does not exist. This configuration file defines encoded username and password and several patterns to check for errors.&amp;nbsp; Add patterns identifying errors as needed. It is necessary to know if the error is occurring infrequently or constantly. The configuration file is in JSON format and can be edited in an editor. The configuration file can only be saved to SAS content; it cannot be saved to a directory on the SAS server.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;SPAN&gt;/Users/&amp;amp;sysuserid/My Folder/rakeConfig.txt&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H1&gt;Prepare for errors&lt;/H1&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;If you are the system administrator, it is recommended that you take the following log and configuration information when errors occur If you can formulate the process of obtaining them and pass them on to technical support before they ask, you can reduce the amount of time you spend going back and forth in the mail.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;get-k8s-info.sh&lt;/LI&gt;
&lt;LI&gt;sas-viya configuration download&lt;/LI&gt;
&lt;LI&gt;Extract OpenSearch logs at the time the error occurred with Rake&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H1&gt;&lt;SPAN&gt;Reason for development&lt;/SPAN&gt;&lt;/H1&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;It was because I was having trouble extracting the logs I needed from OpenSearch. I created a macro that does it easily and included it in a custom step following the advice of a colleague. I hope this helps with your investigation.&lt;/P&gt;</description>
      <pubDate>Fri, 27 Dec 2024 06:58:15 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Communities-Library/Rake-is-a-custom-step-and-macro-to-extract-Viya-logs/ta-p/937739</guid>
      <dc:creator>working-dog</dc:creator>
      <dc:date>2024-12-27T06:58:15Z</dc:date>
    </item>
    <item>
      <title>Re: ODSのSTYLEと画像の出力について</title>
      <link>https://communities.sas.com/t5/SAS-Japan-Discussion/ODS%E3%81%AESTYLE%E3%81%A8%E7%94%BB%E5%83%8F%E3%81%AE%E5%87%BA%E5%8A%9B%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/m-p/889463#M591</link>
      <description>&lt;P&gt;実行環境によって使える設定場所が異なるので、当て推量込みで書きます。&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;SAS Enterprise Guideならば
&lt;UL&gt;
&lt;LI&gt;オプション&amp;gt;SASプログラム&amp;gt;サーバ接続時にSASコードをサブミットする。&lt;/LI&gt;
&lt;LI&gt;プロセスフローで使える Autoexec Process Flowを使う&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;LI&gt;SAS Studio
&lt;UL&gt;
&lt;LI&gt;オプション&amp;gt;Autoexec File&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;LI&gt;システム全体であれば
&lt;UL&gt;
&lt;LI&gt;!SASROOT配下の AUTOEXECに仕込む&amp;nbsp;
&lt;UL&gt;
&lt;LI&gt;WorkspaceServer配下の *_usermode.sas に仕込む&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;
&lt;/LI&gt;
&lt;/UL&gt;</description>
      <pubDate>Wed, 16 Aug 2023 03:31:58 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Japan-Discussion/ODS%E3%81%AESTYLE%E3%81%A8%E7%94%BB%E5%83%8F%E3%81%AE%E5%87%BA%E5%8A%9B%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/m-p/889463#M591</guid>
      <dc:creator>working-dog</dc:creator>
      <dc:date>2023-08-16T03:31:58Z</dc:date>
    </item>
    <item>
      <title>Script to make a list of export targets for Viya's job flow.</title>
      <link>https://communities.sas.com/t5/SAS-Communities-Library/Script-to-make-a-list-of-export-targets-for-Viya-s-job-flow/ta-p/797986</link>
      <description>&lt;DIV class="lia-message-template-content-zone"&gt;
&lt;P&gt;After reading the article "&lt;A href="https://communities.sas.com/t5/SAS-Communities-Library/Promoting-SAS-Viya-Job-Flows/ta-p/640483" target="_self"&gt;Promoting SAS Viya Job Flows&lt;/A&gt;", I realized that I am a lazy person. Creating a JSON file that defines what to export is very time-consuming and can keep me focused if I only have to do it once. But if I needed to export many jobs many times, I thought I would write a script. And I managed to create a working script.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The example screenshot shows the procedure of exporting a test flow "ant-flow". You can specify the name or ID of the flow as an argument to the script.&amp;nbsp;Please install the sas-viya CLI before running this script, this will not work with Viya 3.x.&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="flow-request.png" style="width: 999px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/68758i2F958FA5651C3574/image-size/large?v=v2&amp;amp;px=999" role="button" title="flow-request.png" alt="flow-request.png" /&gt;&lt;/span&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ant-flow.png" style="width: 999px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/68759i7292FC7601B21C1F/image-size/large?v=v2&amp;amp;px=999" role="button" title="ant-flow.png" alt="ant-flow.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;The following shows how the script retrieves the desired ID and URI.&amp;nbsp;First, get the ID of the flow from its name.&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="cli-1.png" style="width: 999px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/68821iE3522F23202FFCA6/image-size/large?v=v2&amp;amp;px=999" role="button" title="cli-1.png" alt="cli-1.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;The next step is to use the ID of the flow as the key to search and get the URI of the flow and the jobs contained in the flow.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="cli-2.png" style="width: 999px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/68822i0F8473311524E247/image-size/large?v=v2&amp;amp;px=999" role="button" title="cli-2.png" alt="cli-2.png" /&gt;&lt;/span&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Retrieve the jobRequestUri by searching for Actions with the job ID as the key. The ID of the job flow is recursively broken down into jobs.&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="cli-3.png" style="width: 827px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/68823i8E99F710C2466D4A/image-size/large?v=v2&amp;amp;px=999" role="button" title="cli-3.png" alt="cli-3.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The script I attached is short and simple, and I think it can be easily modified.&amp;nbsp;If you could point out any errors, I would be very grateful.&lt;/P&gt;
&lt;/DIV&gt;</description>
      <pubDate>Thu, 24 Feb 2022 11:05:57 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Communities-Library/Script-to-make-a-list-of-export-targets-for-Viya-s-job-flow/ta-p/797986</guid>
      <dc:creator>working-dog</dc:creator>
      <dc:date>2022-02-24T11:05:57Z</dc:date>
    </item>
    <item>
      <title>Start/Stop all SAS Services in Windows using PowerShell</title>
      <link>https://communities.sas.com/t5/SAS-Communities-Library/Start-Stop-all-SAS-Services-in-Windows-using-PowerShell/ta-p/784161</link>
      <description>&lt;DIV class="lia-message-template-content-zone"&gt;
&lt;P data-unlink="true"&gt;Inspired by the &lt;A title="Start/Stop all SAS Services in Windows using Batch File" href="https://communities.sas.com/t5/SAS-Communities-Library/Start-Stop-all-SAS-Services-in-Windows-using-Batch-File/ta-p/612599" target="_self"&gt;past post&lt;/A&gt;, I have created a script for starting/stopping SAS services in Windows using PowerShell.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The script identifies the SAS services and sorts them by configuration, level, and service start order to create the start and stop order. If you want to change the startup order, you can change the numbers in the script that indicate the sort order. I have made this script to work with as little configuration as possible. The script is simple enough that you can modify it to suit your particular environment.&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="sas-servers.ps1" style="width: 400px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/66423iC0C8D8FBC0AC7C6C/image-size/medium?v=v2&amp;amp;px=400" role="button" title="SERVICE.png" alt="sas-servers.ps1" /&gt;&lt;span class="lia-inline-image-caption" onclick="event.preventDefault();"&gt;sas-servers.ps1&lt;/span&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The script can be modified to add services to be captured and to modify the order of startup by modifying the following part. You can see how the script calculates the order of service startup by setting the $debug variable to $true and displaying the contents of the sort key.&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="order.png" style="width: 400px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/66432i510F7156A0AF82A4/image-size/medium?v=v2&amp;amp;px=400" role="button" title="order.png" alt="order.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;DIV class="lia-quilt-row"&gt;
&lt;DIV class="lia-quilt-column lia-quilt-column-24 lia-quilt-column-single lia-quilt-column-main"&gt;
&lt;DIV class="lia-quilt-column-alley lia-quilt-column-alley-single"&gt;
&lt;DIV class="lia-message-body-wrapper lia-component-message-view-widget-body"&gt;
&lt;DIV id="bodyDisplay" class="lia-message-body"&gt;
&lt;DIV class="lia-message-body-content"&gt;
&lt;DIV class="lia-message-template-content-zone"&gt;
&lt;P&gt;You can download the script from the attachment.&lt;/P&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;</description>
      <pubDate>Mon, 06 Dec 2021 12:29:56 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Communities-Library/Start-Stop-all-SAS-Services-in-Windows-using-PowerShell/ta-p/784161</guid>
      <dc:creator>working-dog</dc:creator>
      <dc:date>2021-12-06T12:29:56Z</dc:date>
    </item>
    <item>
      <title>Re: SASとVBとの同期</title>
      <link>https://communities.sas.com/t5/SAS-Japan-Discussion/SAS%E3%81%A8VB%E3%81%A8%E3%81%AE%E5%90%8C%E6%9C%9F/m-p/471107#M21</link>
      <description>&lt;P&gt;&lt;A href="http://support.sas.com/rnd/itech/doc/dist-obj/comdoc/ilngca.html#ilngIfaceAsync" target="_blank"&gt;Async&lt;/A&gt;&amp;nbsp;Propertyが使えるかも知れません。&lt;/P&gt;
&lt;P&gt;手元に環境がないのですぐに確認できませんが、時間ある時に試してみます。&lt;/P&gt;
&lt;P&gt;&lt;A href="http://support.sas.com/rnd/itech/doc/dist-obj/comdoc/ilngca.html" target="_blank"&gt;http://support.sas.com/rnd/itech/doc/dist-obj/comdoc/ilngca.html&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 18 Jun 2018 14:41:57 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Japan-Discussion/SAS%E3%81%A8VB%E3%81%A8%E3%81%AE%E5%90%8C%E6%9C%9F/m-p/471107#M21</guid>
      <dc:creator>working-dog</dc:creator>
      <dc:date>2018-06-18T14:41:57Z</dc:date>
    </item>
  </channel>
</rss>

