tfactl : concentrateur de fichiers journaux et plus encore

Quand on installe ou l’on met à jour la couche Oracle Grid Infrastructure 12.2.0.1, on est surpris au moment de l’exécution du fichier root.sh de voir des éléments relatifs à un outil nommé « tfactl » qui s’installe pendant cette phase.
Qu’est-ce que ce nouvel élément dont l’installation était plus discrète dans les versions précédentes et quelles fonctionnalités va-t-il apporter ?
Easyteam s’était déjà penché sur la question en décembre 2013 et a apporté des éléments de réponse dans l’article« Trace File Analyzer Collector ».
Je voudrais pour ma part compléter et rafraichir ses informations, car Oracle s’appuie maintenant beaucoup sur cet outil, que ce soit pour vous demander de télécharger des logs pour le traitement d’une SR ou pour les analyses de ses propres serveurs à disposition dans Oracle Cloud.
Ceci induit des mises à jour régulières apportant de nombreuses nouveautés et améliorations; ainsi, si l’outil est bien présent sous les dernières distributions des produits, sa version la plus récente est disponible depuis la note MOS TFA Collector – TFA with Database Support Tools Bundle (Doc ID 1513912.1) et il est conseillé de prévoir son installation au moins pour la fonction de collecte SRDC (Service Request Data Collection) ou l’intégration de nombreux outils de diagnostics comme « oratop ».
Voyons d’abord la mise à jour avec un exemple illustré :
Situation de départ : tfactl installé par défaut avec la couche Grid Infrastructure 12.2.0.1 sur un cluster de VM linux sur un Exadata X6-2.

  • Depuis la note précitée, récupération de la version courante (à ce jour 12.2.1.3.0), fichier zip téléchargé de 150Mo recopié sur un des serveurs
  • Unzip du fichier
[root@exaeleadm01vm01 tmp]# unzip TFA-LINUX_v12.2.1.3.0.zip
Archive: TFA-LINUX_v12.2.1.3.0.zip
inflating: README.txt
inflating: installTFA-LINUX
  • le fichier README.txt vous donne le résumé des informations sur la version ainsi que les pointeurs importants :
[root@exaeleadm01vm01 tmp]# cat README.txt
Summary
-------
This is the README file for Trace File Analyzer (TFA) 12.2.1.3.0 Installer.
This patch (21757377) installs/updates the "TFA" utility. TFA is used for targeted collection of trace files and diagnostic data.
TFA can be used with Oracle Database and Grid Infrastructure products from version 11.2. upwards.
Please see the User Guide Supplied with this Patch for full instructions.
This download of TFA includes all tools that are part of the 'Support Tools Bundle'.
This download also includes Java Runtime Edition 1.8 that is shipped solely for the use of running TFA.
How to install the utility:
---------------------------
To install this patch, Please extract the top level "zipped file" using unzip.
On Linux and Unix systems simply executing the file installTFAxxx will upgrade TFA if it is already installed.
By default TFA will be upgraded across all nodes in the TFA configuration where the TFA daemon is available.
For new or non default installation please follow the instructions as described in the User Guide.
TFA User Guide:
---------------
The TFA USer Guide can now be found online at https://docs.oracle.com/cd/E91263_01/
Enhancements and Bugs Fixed in TFA 12.2.1.3.0
---------------------------------------------
For a list of Enhancements and bugs fixed in each TFA release please view the release history at :-
https://support.oracle.com/epmos/main/downloadattachmentprocessor?attachid=1513912.1:TFA_VERSION_HISTORY
  • Lancement de l’installation

Comme c’est écrit dans ce README, l’installation se lance en exécutant le fichier installTFA-LINUX (d’une taille de 152 Mo).
L’installeur détecte la présence de la version précédente, les serveurs faisant partie de votre configuration et il vous demande une confirmation pour la mise à jour :

[root@exaeleadm01vm01 tmp]# ./installTFA-LINUX
TFA Installation Log will be written to File : /tmp/tfa_install_244468_2017_12_08-14_30_40.log
Starting TFA installation
TFA Version: 122130 Build Date: 201711060821
TFA HOME : /u01/app/12.2.0.1/grid/tfa/exaeleadm01vm01/tfa_home
Installed Build Version: 122100 Build Date: 201611221703
TFA is already installed. Patching /u01/app/12.2.0.1/grid/tfa/exaeleadm01vm01/tfa_home...
TFA patching CRS or DB from zipfile extracted to /tmp/.244468.tfa
TFA patching typical install from zipfile is written to /u01/app/12.2.0.1/grid/tfa/exaeleadm01vm01/tfapatch.log
TFA will be Patched on:
exaeleadm01vm01
exaeleadm02vm01
Do you want to continue with patching TFA? [Y|N] [Y]: Y

Ensuite, à condition que les équivalences SSH soient bien configurées, il réalise toutes les opérations nécessaires sur tous les serveurs : arrêt de la collecte, copie des fichiers, installation, vérification, relance de la collecte et nettoyage.

Checking for ssh equivalency in exaeleadm02vm01
exaeleadm02vm01 is configured for ssh user equivalency for root user
Using SSH to patch TFA to remote nodes :
Applying Patch on exaeleadm02vm01:
TFA_HOME: /u01/app/12.2.0.1/grid/tfa/exaeleadm02vm01/tfa_home
Stopping TFA Support Tools...
Shutting down TFA
oracle-tfa stop/waiting
. . . . .
Killing TFA running with pid 2740
. . .
Successfully shutdown TFA..
Copying files from exaeleadm01vm01 to exaeleadm02vm01...
Current version of Berkeley DB in is 5 or higher, so no DbPreUpgrade required
WARNING - TFA Software is older than 180 days. Please consider upgrading TFA to the latest version.
WARNING - TFA Software is older than 180 days. Please consider upgrading TFA to the latest version.
WARNING - TFA Software is older than 180 days. Please consider upgrading TFA to the latest version.
Running commands to fix init.tfa and tfactl in exaeleadm02vm01...
WARNING - TFA Software is older than 180 days. Please consider upgrading TFA to the latest version.
WARNING - TFA Software is older than 180 days. Please consider upgrading TFA to the latest version.
WARNING - TFA Software is older than 180 days. Please consider upgrading TFA to the latest version.
Updating init.tfa in exaeleadm02vm01...
Starting TFA in exaeleadm02vm01...
Starting TFA..
oracle-tfa start/running, process 93054
Waiting up to 100 seconds for TFA to be started..
. . . . .
Successfully started TFA Process..
. . . . .
WARNING - TFA Software is older than 180 days. Please consider upgrading TFA to the latest version.
TFA Started and listening for commands
Removing /u01/app/12.2.0.1/grid/tfa/exaeleadm02vm01/tfa_home/jlib/je-5.0.84.jar
Removing /u01/app/12.2.0.1/grid/tfa/exaeleadm02vm01/tfa_home/jlib/commons-io-2.1.jar
WARNING - TFA Software is older than 180 days. Please consider upgrading TFA to the latest version.
WARNING - TFA Software is older than 180 days. Please consider upgrading TFA to the latest version.
Enabling Access for Non-root Users on exaeleadm02vm01...
Applying Patch on exaeleadm01vm01:
Stopping TFA Support Tools...
Shutting down TFA for Patching...
Shutting down TFA
oracle-tfa stop/waiting
. . . . .
Killing TFA running with pid 2739
. . .
Successfully shutdown TFA..
No Berkeley DB upgrade required
Copying TFA Certificates...
Running commands to fix init.tfa and tfactl in localhost
Starting TFA in exaeleadm01vm01...
Starting TFA..
oracle-tfa start/running, process 248086
Waiting up to 100 seconds for TFA to be started..
. . . . .
Successfully started TFA Process..
. . . . .
TFA Started and listening for commands
Removing /u01/app/12.2.0.1/grid/tfa/exaeleadm01vm01/tfa_home/jlib/je-5.0.84.jar
Enabling Access for Non-root Users on exaeleadm01vm01...
WARNING - TFA Software is older than 180 days. Please consider upgrading TFA to the latest version.
WARNING - TFA Software is older than 180 days. Please consider upgrading TFA to the latest version.
.-----------------------------------------------------------------------.
| Host | TFA Version | TFA Build ID | Upgrade Status |
+-----------------+-------------+----------------------+----------------+
| exaeleadm01vm01 | 12.2.1.3.0 | 12213020171106082156 | UPGRADED |
| exaeleadm02vm01 | 12.2.1.3.0 | 12213020171106082156 | UPGRADED |
'-----------------+-------------+----------------------+----------------'

En dehors du message de « WARNING » sur la pseudo ancienneté de la version (celle qui est mise est pourtant la dernière en date proposée par Oracle à ce moment là, avec une mise à jour de la note du 6 novembre 2017), pas d’anomalie particulière rencontrée et le déroulement est rapide.
Nous voici avec la dernière version et on peut le controler rapidement :

[root@exaeleadm01vm01 tmp]# tfactl status
.--------------------------------------------------------------------------------------------------------.
| Host | Status of TFA | PID | Port | Version | Build ID | Inventory Status |
+-----------------+---------------+--------+------+------------+----------------------+------------------+
| exaeleadm01vm01 | RUNNING | 248190 | 5000 | 12.2.1.3.0 | 12213020171106082156 | COMPLETE |
| exaeleadm02vm01 | RUNNING | 93161 | 5000 | 12.2.1.3.0 | 12213020171106082156 | COMPLETE |
'-----------------+---------------+--------+------+------------+----------------------+------------------'

Depuis les versions 12 du produit, il intègre et deploie avec lui de nombreux autres utlitaires et c’est un vrai plus. Car depuis une seule interface sur un serveur on peut avoir la globalité des accès sur l’ensemble de la configuration.
Voici  la liste  des outils dans la version courante :

[root@exaeleadm01vm01 tmp]# tfactl toolstatus
.------------------------------------------------------------------.
| TOOLS STATUS - HOST : exaeleadm01vm01 |
+----------------------+--------------+--------------+-------------+
| Tool Type | Tool | Version | Status |
+----------------------+--------------+--------------+-------------+
| Development Tools | exachk | 12.2.0.1.3 | DEPLOYED |
| | oratop | 14.1.2 | DEPLOYED |
+----------------------+--------------+--------------+-------------+
| Support Tools Bundle | darda | 2.10.0.R6036 | DEPLOYED |
| | oswbb | 8.0.1 | NOT RUNNING |
| | prw | 12.1.13.11.4 | NOT RUNNING |
+----------------------+--------------+--------------+-------------+
| TFA Utilities | alertsummary | 12.2.1.1.0 | DEPLOYED |
| | calog | 12.2.0.1.0 | DEPLOYED |
| | changes | 12.2.1.1.0 | DEPLOYED |
| | dbglevel | 12.2.1.1.0 | DEPLOYED |
| | events | 12.2.1.1.0 | DEPLOYED |
| | grep | 12.2.1.1.0 | DEPLOYED |
| | history | 12.2.1.1.0 | DEPLOYED |
| | ls | 12.2.1.1.0 | DEPLOYED |
| | managelogs | 12.2.1.1.0 | DEPLOYED |
| | menu | 12.2.1.1.0 | DEPLOYED |
| | param | 12.2.1.1.0 | DEPLOYED |
| | ps | 12.2.1.1.0 | DEPLOYED |
| | pstack | 12.2.1.1.0 | DEPLOYED |
| | summary | 12.2.1.1.0 | DEPLOYED |
| | tail | 12.2.1.1.0 | DEPLOYED |
| | triage | 12.2.1.1.0 | DEPLOYED |
| | vi | 12.2.1.1.0 | DEPLOYED |
'----------------------+--------------+--------------+-------------'

Il faut bien avoir en tête les simplifications amenées :

  • Une seule installation pour tous les outils de collecte des informations demandées par le support Oracle, et d’outils de diagnostic puissant (comme oratop)
  • Un point central d’exécution de ces outils
  • La détection automatique de la configuration avec l’installation correspondante (orachk pour un serveur autonome, exachk pour un cluster sur Exadata)

Voici maintenant quelques exemples d’utilisation :

  • Affichage via « tail » de tous les fichiers d’alerte présents sur votre serveur
[root@ele1ole6 bin]# ./tfactl run tail alert_
Output from host : ele1ole6
------------------------------
==> /u01/app/oracle/diag/rdbms/or1212/OR1212/trace/alert_OR1212.log <==
Instance Critical Process (pid: 13, ospid: 2815, LGWR) died unexpectedly
Fri Dec 08 09:01:25 2017
System state dump requested by (instance=1, osid=2791 (PMON)), summary=[abnormal instance termination].
System State dumped to trace file /u01/app/oracle/diag/rdbms/or1212/OR1212/trace/OR1212_diag_2805_20171208090125.trc
Fri Dec 08 09:01:25 2017
PMON (ospid: 2791): terminating the instance due to error 470
Fri Dec 08 09:01:25 2017
Dumping diagnostic data in directory=[cdmp_20171208090125], requested by (instance=1, osid=2791 (PMON)), summary=[abnormal instance termination].
Fri Dec 08 09:01:26 2017
Instance terminated by PMON, pid = 2791
==> /u01/app/oracle/diag/rdbms/orcl/ORCL/trace/alert_ORCL.log <==
ARCH: Archival disabled due to shutdown: 1089
Shutting down archive processes
Archiving is disabled
Tue Dec 05 11:23:22 2017
Stopping background process VKTM
ARCH: Archival disabled due to shutdown: 1089
Shutting down archive processes
Archiving is disabled
Tue Dec 05 11:23:24 2017
Instance shutdown complete

Avec à disposition toutes les possiblités du tail : nombre de ligne -n100 ou scrutation du ou des fichiers avec l’option -f, et tout cela sans avoir à savoir où sont localisés ces fichiers, c’est un gain de temps pour l’analyse non négligeable.

  • Affichage des fichiers journaux

De même, l’association avec la commande « vi » permet de visualiser le contenu de tous les fichiers d’alerte via une commande de type :

[root@ele1ole6 bin]# ./tfactl run vi alert_
2 files to edit
  • oratop

L’utilisation de l’outil « oratop », équivalent de la commande « top » des processus unix appliquée à la base de données :

[root@exaeleadm01vm03 ~]# tfactl run oratop -database validm
Oracle 12c - Primary VALIDM 17:15:32 up: 9.1d, 2 ins, 0 sn, 0 us, 21G mt, 0% fra, 2 er, 0.2% db
ID %CPU LOAD %DCU AAS ASC ASI ASW ASP AST UST MBPS IOPS IORL LOGR PHYR PHYW %FR PGA TEMP UTPS UCPS SSRT DCTR DWTR %DBT
1 1 0 0 0 0 0 0 0 0 0 0 4 0 60 0 0 6 549M 6.0M 0 18 48u 90 9 86.1
2 1 0 0 0 0 0 0 0 0 0 0 3 26u 0 0 0 7 572M 6.0M 0 13 321u 91 8 13.9
EVENT (C) TOTAL WAITS TIME(s) AVG_MS PCT WAIT_CLASS
DB CPU 13729 73
Disk file Mirror Read 2416751 1684 0.7 9 User I/O
control file sequential read 6162675 1500 0.2 8 System I/O
oracle thread bootstrap 82659 1416 17.1 8 Other
ASM file metadata operation 1060091 403 0.4 2 Other
  • L’exécution d’une commande « oracheck » sur un serveur autonome

L’installation sur un serveur autonome se réalise avec le même fichier TFA-LINUX_v12.2.1.3.0.zip et la même commande :

[root@ele1ole6 bin]# ./installTFA-LINUX

L’installation demande le répertoire cible, par exemple /opt/tfa
L’espace pris est alors proche de 450Mo
La commande orachk sur ce serveur détecte rapidement toutes les petites anomalies non conformes au « Best practises » :

[root@ele1ole6 12.1.0.2]# export RAT_ORACLE_HOME=/u01/app/oracle/product/12.1.0.2
[root@ele1ole6 12.1.0.2]# ./tfactl run orachk
bash: ./tfactl: Aucun fichier ou dossier de ce type
[root@ele1ole6 12.1.0.2]# cd /opt/tfa/bin/
[root@ele1ole6 bin]# ./tfactl run orachk
This computer is for [S]ingle instance database or part of a [C]luster to run RAC database [S|C] [C]:S
RDBMS binaries found at /u01/app/oracle/product/12.1.0.2 and ORACLE_HOME not set. Do you want to set ORACLE_HOME to /u01/app/oracle/product/12.1.0.2?[y/n][y]
Checking for prompts for root user on all nodes...
Checking Status of Oracle Software Stack - Clusterware, ASM, RDBMS
. . . . . . . . .
-------------------------------------------------------------------------------------------------------
Oracle Stack Status
-------------------------------------------------------------------------------------------------------
Host Name CRS Installed ASM HOME RDBMS Installed CRS UP ASM UP RDBMS UP DB Instance Name
-------------------------------------------------------------------------------------------------------
ele1ole6 No No Yes No No No
-------------------------------------------------------------------------------------------------------
Checking for prompts for oracle user on all nodes...
Copying plug-ins
. . . . . . . . .
*** Checking Best Practice Recommendations (PASS/WARNING/FAIL) ***
Collections and audit checks log file is
/opt/tfa/repository/suptools/ele1ole6/orachk/root/orachk_ele1ole6_120817_150731/log/orachk.log
Checking for prompts in /root/.bash_profile on ele1ole6 for root user...
. .
=============================================================
Node name - ele1ole6
=============================================================
. . . . .
Collecting - CPU Information
Collecting - DiskMount Information
Collecting - Kernel parameters
Collecting - Maximum number of semaphore sets on system
Collecting - Maximum number of semaphores on system
Collecting - Maximum number of semaphores per semaphore set
Collecting - Memory Information
Collecting - OS Packages
Collecting - Operating system release information and kernel version
Collecting - Patches for RDBMS Home
Collecting - Table of file system defaults
Collecting - number of semaphore operations per semop system call
Collecting - Disk Information
Collecting - Linux Operating system health check using vmpscan.sh
Collecting - Root user limits
Data collections completed. Checking best practices on ele1ole6.
--------------------------------------------------------------------------------------
FAIL => Bash is vulnerable to code injection (CVE-2014-6271)
WARNING => Linux Swap Configuration does NOT meet Recommendation
WARNING => physical memory is not sufficient
INFO => Important Storage Minimum Requirements for Grid & Database Homes
INFO => Most recent ADR incidents
WARNING => Kernel Parameter kernel.shmall Is lower than the recommended value
FAIL => Operating system hugepages count does not satisfy total SGA requirements
WARNING => OSWatcher is not running as is recommended.
WARNING => Package ksh-20100621-6.el6-x86_64 does not meet recommendation for ksh-20100621-12.el6-x86_64
INFO => Consider increasing the COREDUMPSIZE size
Best Practice checking completed.Checking recommended patches on ele1ole6.
---------------------------------------------------------------------------------
---------------------------------------------------------------------------------
---------------------------------------------------------------------------------
RDBMS homes patches summary report
---------------------------------------------------------------------------------
Total patches Applied on RDBMS Applied on ASM ORACLE_HOME
---------------------------------------------------------------------------------
---------------------------------------------------------------------------------
    • Collecte d’informations sur erreur Oracle

Dernier exemple d’usage que je donnerais ici, l’illustration de la nouvelle option de collecte SRDC  (pour Service Request Data Collection)

    1) Détection d’une anomalie
    Traitement de l’incident :
[root@ele1ole6 bin]# ./tfactl events
Output from host : ele1ole6
------------------------------
Dec/07/2017 18:04:35 :
[db.or1212.OR1212] : ORA-07445: exception trouvée : dump noyau [PC:0x0] [SIGSEGV] [ADDR:0x0] [PC:0x0] [Address not mapped to object] []
Dec/08/2017 09:01:25 :
[db.or1212.OR1212] : PMON (ospid: 2791): terminating the instance due to error 470
Dec/08/2017 09:01:26 :
[db.or1212.OR1212] : Instance terminated by PMON, pid = 2791
Summary :
=========
INFO : 0
ERROR : 3
WARNING : 0

2) Récupération des journaux pour envoi au support Oracle

Une belle ORA-7445 pour laquelle on ouvre un SR au support Oracle et qui lui nous demande plein d’informations.
Nous allons lui donner le tout en une seule commande :

[root@ele1ole6 bin]# ./tfactl diagcollect -srdc ORA-07445 -sr 123456789
SRDC diagostic collections must be run as an oracle privileged user - not root

Noter qu’il faut être l’utilisateur associé à la distribution de la base concernée pour pouvoir faire cette extraction.

[root@ele1ole6 bin]# su - oracle
[oracle@ele1ole6 ~]$ . oraenv
ORACLE_SID = [oracle] ? OR1212
The Oracle base remains unchanged with value /u01/app/oracle

Il faudra entrer la date de référence de l’incident ou ‘ALL’ si on ne sait pas, ainsi que le nom de la base concernée et l’événement associé :

[oracle@ele1ole6 ~]$ /opt/tfa/bin//tfactl diagcollect -srdc ORA-07445 -sr 123456789
MOS setup is not done. It is needed to upload collection to SR
Run: tfactl setupmos
Enter the time of the ORA-07445 [YYYY-MM-DD HH24:MI:SS,<RETURN>=ALL] :
Enter the Database Name [<RETURN>=ALL] :
1. Dec/07/2017 18:04:35 : [or1212] ORA-07445: exception trouvée : dump noyau [PC:0x0] [SIGSEGV] [ADDR:0x0] [PC:0x0] [Address not mapped to object] []
Please choose the event : 1-1 [1]
Selected value is : 1 ( Dec/07/2017 18:04:35 )
Scripts to be run by this srdc: ipspack rdahcve1210 rdahcve1120 rdahcve1110
Components included in this srdc: OS CRS DATABASE NOCHMOS
Collecting data for local node(s)
Scanning files from Dec/07/2017 12:04:35 to Dec/08/2017 00:04:35
Collection Id : 20171208154030ele1ole6
Detailed Logging at : /opt/tfa/repository/srdc_ora7445_collection_Fri_Dec_08_15_40_30_CET_2017_node_local/diagcollect_20171208154030_ele1ole6.log
2017/12/08 15:40:34 CET : NOTE : Any file or directory name containing the string .com will be renamed to replace .com with dotcom
2017/12/08 15:40:34 CET : Collection Name : tfa_srdc_ora7445_Fri_Dec_08_15_40_30_CET_2017.zip
2017/12/08 15:40:34 CET : Scanning of files for Collection in progress...
2017/12/08 15:40:34 CET : Collecting additional diagnostic information...
2017/12/08 15:40:39 CET : Getting list of files satisfying time range [12/07/2017 12:04:35 CET, 12/08/2017 00:04:35 CET]
2017/12/08 15:40:45 CET : Collecting ADR incident files...
2017/12/08 15:41:22 CET : Completed collection of additional diagnostic information...
2017/12/08 15:41:25 CET : Completed Local Collection
2017/12/08 15:41:25 CET : Uploading collection to SR - 123456789
2017/12/08 15:41:25 CET : Successfully uploaded collection to SR
.------------------------------------.
| Collection Summary |
+----------+-----------+------+------+
| Host | Status | Size | Time |
+----------+-----------+------+------+
| ele1ole6 | Completed | 1MB | 51s |
'----------+-----------+------+------'
Logs are being collected to: /opt/tfa/repository/srdc_ora7445_collection_Fri_Dec_08_15_40_30_CET_2017_node_local
/opt/tfa/repository/srdc_ora7445_collection_Fri_Dec_08_15_40_30_CET_2017_node_local/ele1ole6.tfa_srdc_ora7445_Fri_Dec_08_15_40_30_CET_2017.zip

Dans ce cas le fichier de zip fait a peine plus de 1Mo, l’équivalent d’un RDA est présent et le support dispose de toutes les informations nécessaires.
Et vous aussi, si vous souhaitez faire votre propre analyse.

 
Les cas possibles de collecte sont variés et vont des ORA-600 les plus significatives au problème de performance (dbperf).
L’outil collecte aussi bien les résultats des ADDM,  des rapports ASH, des traces oswatcher, des informations sur les incidents (s’il y en a eu sur la période) que le résultat d’un oracheck en passant par les problèmes consécutifs à la mise en place de patch (dbpatchinstall).
 
Pour conclure, en tant que consultant réalisant de nombreux audits, je suis devenu complètement fan de cet outil qui me fait gagner un tant précieux pendant mes interventions, me permettant de me consacrer pleinement à l’analyse des éléments plutôt qu’à leur collecte. J’espère vous avoir donné envie de l’utiliser et je suis certain que cela vous facilitera le travail dans de nombreux cas.