Accounting se denomina a las operaciones que los usuarios realizarán en el sistema del gatekeeper: inicio de una llamada, parada y retroalimentación de la misma; e incluso el inicio y parada del propio gatekeeper.
Las siguientes secciones en el fichero de configuración pueden ser usadas para configurar el accounting.
La seción define una lista de módulos que serán los que realicen el accounting. Las cuentas son para anotar eventos de encendido/apagado del gatekeeper y eventos de inicio/parada/actualización de llamada. Cada módulo de accounting anota eventos recibidos a un módulo de almacenaje específico. Dicho almacenamiento puede ser en texto plano o un servidor RADIUS y muchos más. La configuración es muy similar a la de autenticación de gatekeeper (ver [Gatekeeper::Auth]).
Todos los CDRs serán también enviados al puerto de estado y pueden ser usados por aplicaciones externas.
acctmod=acciones
<acctmod> := FileAcct | RadAcct | SQLAcct | ...
<acciones> := <control>[;<evento>,<evento>,...]
<control> := optional | required | sufficient | alternative
<evento> := start | stop | connect | update | on | off
start
- una llamada ha sido iniciada y un mensaje de Configuración ha sido recibido (solo disponible en modo enrutado),connect
- una llamada ha sido establecida (solo disponible en modo enrutado),update
- una llamada está activa y se realizó la actualización periódica
para reflejar la duración de la nueva llamada. La Frecuencia de estas actualizaciones
está determinada en la sección AcctUpdateInterval variable de
[CallTable],stop
- una llamada ha sido desconectada o parada (eliminada de la tabla de llamadas de GK),on
- el gatekeeper ha sido iniciado,off
- el gatekeeper ha sido apagado.ok
- el evento ha sido anotado correctamente por este módulo,fail
- el módulo falló al anotar el evento,next
- el evento no ha sido anotado por este módulo, porque el módulo
no está configurado para o no soporta este tipo de evento.required
- si el módulo falla al anotar un evento, el estado final es
configurado a fallo y el evento es pasado a cualquiera
de los restantes módulos,optional
- el módulo intenta anotar un evento, pero el estado final
no es afectado si sale bien o falla (a excepción de cuando el
módulo es el último en la lista). El vento es siempre pasado
a cualquiera de los módulos restantes,sufficient
- el módulo determina el estado final. Si un evento es anotado
satisfactoriamente, ningún módulo más es procesado. En caso
contrario el estado final es configurado a fallo y el evento
es pasado a cualquiera del resto de módulos,alternative
- si el módulo anota un evento satisfactoriamente, ningún
módulo más será procesado. En caso contrario el estado final
no será modificado y el evento es pasado al resto de módulos.Los módulos de acconting actualmente soportados:
FileAcct
Un anotador de texto plano CDR. Este emite una línea de estado como líneas CDR a un fichero de texto especificado. Este modulo soporta solo el evento de accounting stop. Las opciones de configuración serán leídas de la sección [FileAcct].
RadAcct
Este módulo realiza accounting a través de RADIUS. Este soporta todos los tipos de eventos (start, stop, update, on, off). Ver la sección [RadAcct] para detalles de configuración.
SQLAcct
Este módulo realiza accounting a través de SQL. Este soporta los tipos de evento (start, stop, update). Ver la sección [SQLAcct] para detalles de configuración.
default
Este es un pseudo-módulo especial - este es usado para configurar el estado final si los módulos precedentes no lo han determinado. El formato es como sigue:
default=<estado>[;<evento>,<evento>,...]
<estado> := accept | fail
<evento> := start | stop | update | on | off
Ejemplo de configuración 1 (intenta anotar el inicio/fin de una llamada con un servidor RADIUS, y siempre escribe un CDR a un fichero de texto):
RadAcct=optional;start,stop
FileAcct=required
Ejemplo de configuración 2 (intenta anotar el inicio/fin de una llamada con un servidor RADIUS, si este falla usa un fichero de anotaciones CDR):
RadAcct=alternative;start,stop
FileAcct=sufficient;stop
default=accept
Ejemplo de configuración 3 (siempre anota los eventos de inicio y fin de llamada con un servidor RADIUS, si este falla para el evento de fin de llamada, usa un fichero CDR para almacenar la información de la llamada):
RadAcct=alternative;start,stop
FileAcct=sufficient;stop
default=fail;start
Este módulo de accounting escribe líneas CDR a un fichero de texto específicado. El formato CDR puede ser uno estándar (el mismo que se puede ver por la interfaz de estado) o uno personalizado (usando la cadena de consulta parametrizada).
DetailFile=RUTA_COMPLETA_Y_NOMBRE_DE_FICHERO
Una ruta completa para el fichero de texto plano CDR. Si un fichero con el nombre dado ya existe, los nuevos CDRs serán añadidos al final del fichero.
StandardCDRFormat=0
1
Usa un formato CDR compatible con el formato de la interfaz de estado CDR
(1
) o crea cadenas CDR personalizadas desde la cadena parametrizada
CDRString.
CDRString=%s|%g|%u|%{Calling-Station-Id}|%{Called-Station-Id}|%d|%c
Si StandardCDRFormat está desactivado (0) o no se especifica nada,
esta cadena parametrizada instruye al gatekeeper de como crear CDRs
personalizados. Los parámetros son especificados usando el caracter %
y
pueden ser una letra (como %n
) o más (como %{CallId}
). Cualquier
caracter más que no sea nombre de parámetro será simplemente copiado al final
de la cadena CDR. Los parámetros reconocidos son los siguientes:
%g
- nombre del gatekeeper%n
- número de llamada (no es único después del reinicio del gatekeeper)%d
- duración de la llamada (segundos)%c
- causa de la desconexión Q.931 (entero decimal)%s
- único (para este gatekeeper) identificador de sesión (Acct-Session-Id)%u
- H.323 ID de la parte llamada%{CallId}
- H.323 identificador de llamada (16 hex digitos de 8-bits)%{ConfId}
- H.323 identificador de conferencia (16 hex digitos de 8-bits)%{setup-time}
- cadena de hora y fecha para el mensaje de configuración Q.931%{connect-time}
- cadena de hora y fecha para un evento de llamada conectada%{disconnect-time}
- cadena de hora y fecha para un evento de llamada desconectada%{caller-ip}
- dirección IP por la que llama el emisor%{caller-port}
- puerto por el que llama el emisor%{callee-ip}
- dirección IP por la que recibe la llamada el receptor%{callee-port}
- puerto por el que recibe la llamada el receptor%{src-info}
- una lista separada por comas de alias del emisor%{dest-info}
- una lista separada por comas de alias del receptor%{Calling-Station-Id}
- número del emisor%{Called-Station-Id}
- número del receptor (reescrito)%{Dialed-Number}
- número marcado (como es recibido por la parte llamada)
TimestampFormat=Cisco
N/A
Formato de cadena de fecha y hora impreso en cadenas CDR. Si esta configuración no es especificada, una global de la sección principal del gatekeeper será aplicada.
Rotate=hourly | daily | weekly | monthly | L... | S...
Si se configura, el fichero CDR será rotado basado en esta configuración. La
rotación horaria activa una rotación por hora, la diaria - una por día,
semanal - una por semana y mensual - una por mes. El momento exacto de la rotación
es determinado por una combinación de RotateDay y RotateTime. Durante la rotación,
un fichero existente será renombrado a CURRENT_FILENAME.YYYYMMDD-HHMMSS, donde
YYYYMMDD-HHMMSS es reemplazado con la hora y fecha actuales y un nuevo CDR es
anotado a un fichero vacío.
Además, la rotación por número de CDRs escritos (L...) y por tamaño de fichero
(S...) está soportado. El prefijo L
especifica un número de líneas CDR
escritas, el prefijo S
especifica el tamaño de un fichero CDR. Los sufijos
k
y m
pueden ser usados para especificar miles (kilobytes) y millones
(megabytes) de bytes.
Ver los ejemplos para más detalles.
[FileAcct]
DetailFile=/var/log/gk/cdr.log
[FileAcct]
DetailFile=/var/log/gk/cdr.log
Rotate=hourly
RotateTime=45
[FileAcct]
DetailFile=/var/log/gk/cdr.log
Rotate=daily
RotateTime=23:00
[FileAcct]
DetailFile=/var/log/gk/cdr.log
Rotate=weekly
RotateDay=Sun
RotateTime=00:59
[FileAcct]
DetailFile=/var/log/gk/cdr.log
Rotate=monthly
RotateDay=31
RotateTime=23:00
[FileAcct]
DetailFile=/var/log/gk/cdr.log
Rotate=L10000
[FileAcct]
DetailFile=/var/log/gk/cdr.log
Rotate=S10k
Este módulo de accounting envía datos de accounting a un servidor RADIUS. La configuración del módulo es casi lo mismo que para los autenticadores RADIUS (ver [RadAuth] y [RadAliasAuth] para más detalles sobre los parámetros).
Servers=SERVER1[:AUTH_PORT:ACCT_PORT[:SECRET]];SERVER2[:AUTH_PORT:ACCT_PORT[:SECRET]];...
N/A
Servidores RADIUS a los que enviar los datos de accounting. Si no se da puerto de
información, el puerto usado se tomará de DefaultAcctPort
. Si SECRET no es
configurado, por defecto se usará el secreto compartido de SharedSecret
.
El nombre del servidor puede ser tanto una dirección IP como un nombre DNS.
Servidores
de ejemplo:Servers=192.168.1.1
Servers=192.168.1.1:1645:1646
Servers=192.168.1.1:1645:1646:secret1
Servers=radius1.mycompany.com:1812:1813
Servers=radius1.mycompany.com;radius2.mycompany.com
Servers=radius1.mycompany.com:1812:1813:secret1;radius2.mycompany.com:1812:1813:secret2
LocalInterface=IP_OR_FQDN
N/A
Interfaz de red local en particular que el cliente RADIUS deberá usar para comunicarse con los servidores RADIUS.
RadiusPortRange=10000-11000
N/A
Por defecto (si esta opción esta activa) el cliente RADIUS asigna los puertos dinámicamente como se especifique por el sistema operativo. Si tu deseas restringir el cliente RADIUS para usar puertos desde un rango particular solo - activa este parámetro.
DefaultAcctPort=PORT_NO
1813
El puerto por defecto será usado por las solicitudes de accounting de RADIUS,
si no se especifica por el atributo Servers
.
SharedSecret=SECRET
N/A (cadena vacía)
Un secreto usado para autenticar este GnuGK (cliente NAS) para el servidor RADIUS.
Esta debe ser una contraseña criptográficamente sólida. Este es el valor usado por
defecto, si no se especifica secret en Servers
.
Si EncryptAllPasswords
está activado, o una variable KeyFilled
se definida
en esta sección, la contraseña en formato encriptado y debe ser creada usando la
utilidad addpasswd
.
RequestTimeout=TIMEOUT_MS
2000
(milisegundos)
Tiempo de espera (milisegundos) para la respuesta de un servidor RADIUS a una solicitud enviada por GnuGK. Si no se recibe una respuesta dentro de este periodo de tiempo, es consultado el siguiente servidor RADIUS.
IdCacheTimeout=TIMEOUT_MS
9000
(milisegundos)
Tiempo de espera (milisegundos) para una solicitud RADIUS con identificadores de 8-bits únicos.
SocketDeleteTimeout=TIMEOUT_MS
60000
(milisegundos) - 60 s
Tiempo que se espera para cerrar sockets RADIUS no usados.
RequestRetransmissions=NUMBER
2
Cuantas veces una simple solicitud RADIUS es transmitida a cada servidor RADIUS configurado (si no se recibe una respuesta).
RoundRobinServers=BOOLEAN
1
Método de retransmisión de solicitudes RADIUS.
AppendCiscoAttributes=BOOLEAN
0
Si está activa, los atributos RADIUS específicos de fabricante Cisco son incluídos en las solicitudes RADIUS (h323-conf-id,h323-call-origin, h323-call-type).
TimestampFormat=ISO8601
N/A
Formato de las cadenas de fecha y hora enviadas en los atributos RADIUS. Si este atributo no está especificado, uno global de la sección principal de gatekeeper será aplicado.
UseDialedNumber=BOOLEAN
0
Selecciona el tipo de número Called-Station-Id entre el original (como fue marcado
por el usuario) - UseDialedNumer=1
- y el reescrito - UseDialedNumer=0
.
Este módulo de accounting almacena información de accounting directamente a una base de datos SQL. Muchas opciones de configuración son comunes con otros módulos SQL.
Driver=MySQL | PostgreSQL
Manejador de base de datos SQL a usar. Actualmente, los manejadores implementados
son MySQL
y PostgreSQL
.
Host=DNS[:PORT] | IP[:PORT]
localhost
Dirección de la máquina del servidor SQL. Puede está en forma de DNS[:PORT]
o IP[:PORT]
. Como sql.mycompany.com
o sql.mycompany.com:3306
o 192.168.3.100
.
Database=billing
billing
El nombre de la base de datos a la que conectarse.
Username=gnugk
El nombre de usuario usado para conectarse a la base de datos.
Password=secret
La contraseña usada para conectarse a la base de datos.
Si la contraseña no se especifica, se intentará una conexión a la
base de datos sin ninguna contraseña.
Si EncryptAllPasswords
está activo, o una variable KeyFilled
es definida
en esta sección, la contraseña está en una forma encriptada y debe ser creada
usando la utilidad addpasswd
.
StartQuery=INSERT ...
N/A
Define una consulta SQL usada para insertar un nuevo registro de llamada a la base
de datos. La consulta es parametrizada - eso significa que el reemplazo de parámetros
se hace antes de que cada consulta sea ejecutada. Los parámetros son precedidos por
el caracter % y pueden ser una letra (como %u) o cadenas enteras (como %{src-info}).
Especifica %% para añadir un caracter de porcentaje dentro de la cadena de consulta
(como %%).
Para SQLAcct
se pueden utilizar los siguientes parámetros:
%g
- nombre del gatekeeper%n
- número de llamada (no es único después del reinicio del gatekeeper)%d
- duración de la llamada (segundos)%c
- causa de la desconexión Q.931 (entero decimal)%s
- único (para este gatekeeper) identificador de sesión (Acct-Session-Id)%u
- H.323 ID de la parte llamada%{gkip}
- dirección IP del gatekeeper%{CallId}
- H.323 identificador de llamada (16 hex digitos de 8-bits)%{ConfId}
- H.323 identificador de conferencia (16 hex digitos de 8-bits)%{setup-time}
- cadena de hora y fecha para el mensaje de configuración Q.931%{connect-time}
- cadena de hora y fecha para un evento de llamada conectada%{disconnect-time}
- cadena de hora y fecha para un evento de llamada desconectada%{caller-ip}
- dirección IP por la que llama el emisor%{caller-port}
- puerto por el que llama el emisor%{callee-ip}
- dirección IP por la que recibe la llamada el receptor%{callee-port}
- puerto por el que recibe la llamada el receptor%{src-info}
- una lista separada por comas de alias del emisor%{dest-info}
- una lista separada por comas de alias del receptor%{Calling-Station-Id}
- número del emisor%{Called-Station-Id}
- número del receptor (reescrito)%{Dialed-Number}
- número marcado (como es recibido por la parte llamada)Consulta de ejemplo:
INSERT INTO call (gkname, sessid, username, calling, called)
VALUES ('%g', '%s', '%u', '%{Calling-Station-Id}', '%{Called-Station-Id}')
StartQueryAlt=INSERT ...
N/A
Define una consulta SQL usada para insertar un nuevo registro de llamada en la
base de datos en caso de que StartQuery
falle por alguna razón (la llamada
ya existe, por ejemplo).
La sintaxis y parámetros son los mismos que para StartQuery
.
UpdateQuery=UPDATE ...
N/A
Define una consulta SQL usada para actualizar un registro de llamada en una base
de datos con el estado de llamada actual. La sintaxis y parámetros son los mismos
que para StartQuery
.
Ejemplo de consulta:
UPDATE call SET duration = %d WHERE gkname = '%g' AND sessid = '%s'
StopQuery=UPDATE ...
N/A
Define una consulta SQL usada para actualizar el registro de llamada en una base
de datos cuando la llamada ha finalizado (desconectada). La sintaxis y parámetros
son los mismos que para StartQuery
.
Ejemplo de consulta:
UPDATE call SET duration = %d, dtime = '%{disconnect-time}' WHERE gkname = '%g' AND sessid = '%s'
StopQueryAlt=INSERT ...
N/A
Define una consulta SQL usada para actualizar un registro de llamada en una base
de datos cuando la llamada ha finalizado (desconectada) en caso de que StopQuery
falle (porque el registro de llamada no exista ya, por ejemplo). La sintaxis y
parámetros son los mismos que para StartQuery
.
Ejemplo de consulta:
INSERT INTO call (gkname, sessid, username, calling, called, duration)
VALUES ('%g', '%s', '%u', '%{Calling-Station-Id}', '%{Called-Station-Id}', %d)
TimestampFormat=MySQL
N/A
Formato de cadena de fecha y hora usada en consultas. Si este atributo no es especificado, uno global de la sección principal de gatekeeper será aplicado.