Mostrando entradas con la etiqueta Log. Mostrar todas las entradas
Mostrando entradas con la etiqueta Log. Mostrar todas las entradas

sábado, 2 de agosto de 2014

Exportar los logs del IIS de Sharepoint a una base de datos

La idea es exportar todos los logs generados del IIS para generar reportes custom sobre el uso de Sharepoint. Después podría generar reportes de SSRS para generar reportes planificados para monitorear y sacar estadísticas del uso de Sharepoint. El script de powershell sólo toma el archivo del día anterior, de esta manera se va procesando diariamente sin generar mucha sobrecarga sobre la base de datos o sobre el IIS al procesar una gran cantidad de datos. De todos modos el script podrá ser configurado para procesar la cantidad de días que requieran (ej: 15 días previos). Siempre se puede ejecutar desde logparse las consultasm pero quería generar reportes más detallados y que se fácil generar reportes históricos.

Primero instalamos LogParser en el servidor donde se quiere procesar los logs

http://www.microsoft.com/en-us/download/details.aspx?id=24659

Segundo, en el IIS de Sharepoint, configurar el logging de la plataforma

image

Seteo los siguientes fields para loguear

image

Tercero, creo la base de datos y la tabla donde se guardaran los logs. Yo estaré usando una sola tabla para cargar logs de varios web applications, pero es recomendable crear una tabla por web application si van a mantener logs de varios días y si tienen muchas accesos al IIS.

La base se llamará IISLogs

image

A continuación creo la tabla, llamada IIS

image

Después creo un usuario de SQL (se puede hacer también con windows authentication, pero va evitar complejidad, uso SQL Authentication)

image

image

El usuario debe tener el permiso de dbowner sobre la tabla “IIS”.

Cuarto, subimos el siguiente script al servidor, y realizamos las configuraciones necesarias. Hay que cambiar las variables en rojo.

$LogParserExe = "C:\Program Files (x86)\Log Parser 2.2\LogParser.exe"

Function ProcessLogFiles ($RequestPath,$urlSite) {    
    try
    {
        $Date = Get-Date
        $Date = $Date.adddays(-1)
        $Date2Str = $Date.ToString("yyyMMdd")
        $Files = gci $RequestPath -Filter "*.log"
        ForEach ($File in $Files){
            $FileDate = $File.creationtime
            $CTDate2Str = $FileDate.ToString("yyyyMMdd")
            if ($CTDate2Str -eq $Date2Str) {
                Write-Host "Procesando el archivo " +  $File.FullName
              
                [string] $query = "SELECT" `
                                  + " TO_TIMESTAMP(date, time) AS EntryTime" `
                                  + ",c-ip AS ClientIpAddress" `
                                  + ",cs-method AS Method" `
                                  + ",STRCAT('"+ $urlSite + "',cs-uri-stem) AS UriStem" `
                                  + ",cs-uri-query AS UriQuery" `
                                  + ",s-port AS Port" `
                                  + ",cs-username AS Username" `
                                  + ",cs(User-Agent) AS UserAgent" `
                                  + ",sc-status AS HttpStatus" `
                                  + ",sc-substatus AS HttpSubstatus" `
                                  + ",sc-win32-status AS Win32Status" `
                                  + ",sc-bytes AS BytesFromServerToClient" `
                                  + ",cs-bytes AS BytesFromClientToServer" `
                                  + ",time-taken AS TimeTaken INTO IIS " `
                                  + " FROM " + $File.FullName


                Write-Host $query
              
                [string[]] $parameters = @()
   
                $parameters += $query
                $parameters += "-i:IISW3C"
                $parameters += "-o:SQL"
                $parameters += "-server:NOMBRESERVIDOR"
                $parameters += "-database:IISLogs"
               
$parameters += "-username:USUARIO_CREADO"
               
$parameters += "-password:PASSWORD_DEL_USUARIOCREADO"               
   
                Write-host "Parameters: $parameters"
   
                Write-Host "Importing log files to database..."
                & $LogParserExe $parameters

            }#if ($CTDate2Str -eq $Date2Str)

        }#ForEach ($File in $Files)
    }
    catch
    {
        write-host "Caught an exception: $_.Excepti" -ForegroundColor Red
        write-host "Exception Type: $($_.Exception.GetType().FullName)" -ForegroundColor Red
        write-host "Exception Message: $($_.Exception.Message)" -ForegroundColor Red
    }

}#Function ProcessLogFiles ($RequestPath)

ProcessLogFiles "D:\Data\Microsoft\LogsIIS\W3SVC378636303" "http://ur_webapplication"

ProcessLogFiles "D:\Data\Microsoft\LogsIIS\W3SVC582736404" “http://ur_webapplicationOTHER

Les dejo el archivo en el siguiente link para descargar también: descargar

A continuación podemos crear una tarea planificada para que se ejecute todos los días el script de powershell. Link

También se debería crear una tarea planificada en SQL Server para que vaya eliminando los logs que tengan N días de antiguedad.

image

Ej: cada 2 semanas voy a borrar los logs.

image

Agrego una tarea “Execute T-SQL Statement Task

image

image

En el caso que quieras ejecutar el script para que procese logs de N días, debes cambiar la siguiente línea.

$Date = $Date.adddays(-1)

Una vez que tenemos los datos en el SQL podemos hacer consultas reportes muy detallados (con Excel) o planificados(SSRS). Veamos un par de ejemplos,.

Ejemplo 1:  Navegadores más usados.

image

Ejemplo 2: uso de excel 2013. Voy a sacar la cantidad de bytes que envío cada usuario y recibió del servidor.

image

image

Ahora lo proceso con PivotTable

image

image

Ejemplo 3: resumen de HTTP Status

image

Veo que tengo muchos request con status 401, lo cual debería revisar. También veo que tengo muchos request con status 304, es que no hay cambios entre request solicitados (en este caso es buena señal.)

Pueden sacar más queries del siguiente link:

http://mlichtenberg.wordpress.com/2011/02/03/log-parser-rocks-more-than-50-examples/

http://logparserplus.com/Examples

viernes, 20 de junio de 2014

Logs de Sharepoint: problemas con GPO

En el event viewer, me aparecería el mensaje:  Tracing Service failed to create the usage log file at 'D:\Data\Logs\Sharepoint\'.  Error 0x5: Access is denied.

Claramente era por problemas de permisos. Entonces ingreso a la carpeta donde se guarda los ULS logs de Sharepoint, y agrego los grupos WSS_WPG/WSS_ADMIN_WPG/Performance Log Users con permisos de full control, y la cuenta Local System también con permisos de full control (se puede bajar un poco los permisos, pero te recomiendo estos permisos)

Pero después de un tiempo, de nuevo empezaban a aparecer los access denied en el Event Viewer. Los mismos aparecerían después de un evento de información: SceCli – Security policy in the Group policy objects has been applied successfully.

image

Lo que me llevo a pensar que era alguna GPO que reemplazaba los permisos de la carpeta.

Ejecuté en cmd con permisos de administrador: GPRESULT /h C:\GPreport.html

Revisé el html, y vi que había una política que reemplazaba los permisos. Hablé con los administradores del AD para modificar esta GPO, setee de nuevo los permisos, y todo quedo perfecto.

clip_image002

miércoles, 12 de septiembre de 2012

Tips/Info #67 Sharepoint 2010

1-Tamaño de bases de datos de un web application

$DatabeSize = Get-SPContentDatabase -WebApplication "http://Web_applicationURL"
$DatabeSize | Format-Table Name, @{Label="Size"; Expression={$_.DiskSizeRequired / 1073741824}}

2-Redireccionar a una página desde una sandboxed solution

Cómo saben NO se pueden usar Response.Redirect, SPUtility.Redirect, Server.Transfer. Para poder hacer un redireccionamiento podremos hacer lo siguiente:

Literal literalRedirect = new Literal
   {
     Text =
        “<script  language=’javascript’>window.location.href=’/';</script>”
   };
Controls.Add(ltrl);

3-No se muestra de forma correcta el Display Name

En sharepoint se muestra el Display Name como Dominio/UserName, lo cual es erroneo.

Para solucionarlo, se puede usar la sincronización via el User Profile Syncronizacion Service. Otra posibilidad es usar el CMDLet Set-SPUser .

Set-SPUser -Identity ‘Domain\cazcon' -DisplayName ‘Christian Azcon’ –Web http://SharePointServer
Para forzar una sincronización manual de las propiedades del usuario desde el AD, se puede usar la siguiente sentencia:
Set-SPUser -Identity ‘Domain\cazcon' –Web http://SharePointServer –SyncFromAD

Más info: http://technet.microsoft.com/en-us/library/ff607827.aspx

4-Insufficient SQL database permissions for user ‘Name: SID: ImpersonationLevel: Impersonation’ in database ‘SharePoint_Config’ on SQL Server instance ‘’ The EXECUTE permission was denied on the object ‘xxxx’, database ‘SharePoint_Config’, schema ‘dbo’.

Abrir el SQL Managment Studio, ir hasta el store que lanza el error, click derecho y elegi la opción de “Properties”, en la sección de “Permissions” , asigna el permiso de “Execute” al grupo “WSS_Content_Application_Pools”.

5-Borrar logs de auditoría en Sharepoint 2010

Ejecuta SharePoint 2010 Powershell con permisos de administrador
Y ejecuta lo siguiente:
$site = Get-SPSite http://siteCollectionURL
$date = Get-Date “12/09/2012”
#verifica si la fecha es correcta
$date
$site.Audit.TrimAuditLog($date)

lunes, 16 de julio de 2012

Tips/Info # 52 Sharepoint 2010

1-Conectores de Search en Sharepoint 2010

Conector Content Repository
bcs Business Connectivity Services (internal protocol)
bcs2 Business Connectivity Services URLs (internal protocol)
file File shares
https Web sites
http Web sites over Secure Sockets Layer (SSL)
notes Lotus Notes databases
rb Exchange public folders for versions prior to Microsoft Exchange Server 2003
rbs Exchange public folders over SSL for versions prior to Exchange Server 2003
sps People profiles in Microsoft Office SharePoint Portal Server 2003
sps3 People profiles in Microsoft Office SharePoint Server 2007
sps3s People profiles in Office SharePoint Server 2007 over SSL
spss People profiles in SharePoint Portal Server 2003 over SSL
sts SharePoint Team Services 1.0 sites (internal protocol)
sts2 Windows SharePoint Services 2.0 and SharePoint Portal Server 2003 sites
sts2s Windows SharePoint Services 2.0 and SharePoint Portal Server 2003 sites over SSL
sts3 Windows SharePoint Services 3.0 and Office SharePoint Server 2007 sites
sts3s Windows SharePoint Services 3.0 and Office SharePoint Server 2007 sites over SSL
sts4 Microsoft SharePoint Foundation 2010 and SharePoint Server 2010 sites
sts4s SharePoint Foundation 2010 and SharePoint Server 2010 sites over SSL

2-“The file reached the maximum download limit. Check that the full text of the document can be meaningfully crawled.” Este error ocurre al indexar contenido.

Search Services indexa los primeros 16 megabytes (MB) de contenido. Después de que este límite es alcanzado, en el log aparece el siguiente error “The file reached the maximum download limit. Check that the full text of the document can be meaningfully crawled.”

Para solucionarlo, haga lo siguiente:
    $ssa = Get-SPEnterpriseSearchServiceApplication
    $ssa.SetProperty("MaxDownloadSize", <nuevo tamaño en MB>)
    $ssa.SetProperty("MaxGrowFactor", <tamaño más grande que 4>)
    $ssa.Update()
   

MaxDownloadSize: este valor especifica el tamaño máximo del texto del documento que se ha filtrado. Por default 16 MB
MaxGrowFactor: este valor especifica el tamaño (como factor de MaxDownloadSize) puede ser el resultado del filtro de índice en el documento. Por default 4 MB

Reiniciar el servicio de OSearch14, y has un IIS reset.
Mas info: http://support.microsoft.com/kb/287231

3-Tabla EventCache

Cada base de datos de contenido almacena una tabla EventCache que es el “registro de cambios” de los objetos contenidos en la base de datos. Cada fila de la tabla es una entrada en el registro. Las columnas de la tabla contienen información, como la fecha y hora de un cambio, el tipo de objeto que se cambió, la naturaleza del cambio y un identificador único del objeto.

El registro de cambios no está disponible a través de la interfaz de usuario. Aunque se puede tener acceso al registro consultando la base de datos directamente.

El registro de cambios registra los siguientes tipos de objetos:
-Elementos, archivos y carpetas
-Metadatos de lista
-Metadatos de sitio
-Directiva de seguridad, usuarios y grupos

El registro de cambios contiene información sobre los siguientes tipos de cambio:
-Agregar
-Actualizar
-Eliminar
-Cambiar el nombre
-Mover de una lista de origen
-Mover a una lista de objetivo

El acceso al registro de cambios se puede realizar desde los siguientes ámbitos, progresivamente inclusivos:
-Lista
-Sitio web
-Colección de sitios
-Base de datos de contenido

De forma predeterminada, las entradas del registro de cambios expiran después de 60 días. Un trabajo del temporizador elimina regularmente las entradas que han expirado. Es posible modificar el período de retención a nivel de la aplicación web estableciendo la propiedad ChangeLogRetentionPeriod. Puede deshabilitar el límite del registro de cambios totalmente estableciendo la propiedad ChangeLogExpirationEnabled.

Puede obtener acceso al registro de cambios llamando al método GetChanges de un objeto SPList, SPWeb, SPSite o SPContentDatabase. Este método devuelve un objeto SPChangeCollection con los cambios que han tenido lugar dentro de un ámbito determinado. A continuación, puede enumerar la colección y examinar cada uno de sus miembros de forma individual.

http://msdn.microsoft.com/es-ar/library/bb417456.aspx

http://msdn.microsoft.com/en-us/library/dd585124(v=office.11).aspx

4-Obtener todos los sites collections de una content database

$ContentDatabase = Get-SPContentDatabase -Identity "ContentDatabase_nombre"
Get-SPSite -Limit All | Where-Object{$_.ContentDatabase -eq $ContentDatabase}

5-Obtener los connections string de las content database


Get-SPDatabase | ForEach-Object {$_.DatabaseConnectionString}


Get-SPDatabase | Export-Clixml -InputObject {$_.DatabaseConnectionString} -Path "c:\Temp\ConnectionStrings.xml

sábado, 25 de febrero de 2012

SPMonitoredScope

Una Región Monitoreada es una parte del software que recopila información para ser mostrada en el Panel del Desarrollador. En SharePoint 2010 todo el código que ejecuta lo hace por defecto dentro de Regiones Monitoreadas, que cuentan cuantas veces se ejecuta cada rutina y cuanto tiempo se demora en ejecutar:

Ej:

   1:  using (SPMonitoredScope GetListsBtnScope = new
   2:   
   3:  SPMonitoredScope("GetListsBtn_Click"))
   4:   
   5:  {
   6:   
   7:  //your code goes here
   8:   
   9:  }

El evento GetListsBtn_Click aparece en el developr Dashboard




  • Un desarrollador puede utilizar SPMonitoredScope para:
    Identificar el uso excesivo de recursos.

  • Identificar los cuellos de botella de rendimiento.

  • Determinar cómo cierto componente interactúa con otros componentes.

Por ejemplo, este código mide  logea el tiempo de ejecución, el número de solicitudes, y el número de consultas de SharePoint de SQL Server(incluyendo el texto de la consulta) que se realizan por la llamada externa.

   1:  using (new SPMonitoredScope("My Scope Name",TraceSeverity.Verbose,1000,
   2:     new SPRequestUsageCounter(3),
   3:     new SPSqlQueryCounter()))
   4:  {
   5:      callExternalCode();
   6:  }



Más información:


http://www.wictorwilen.se/Post/Improve-your-SharePoint-2010-applications-with-monitoring-using-SPMonitoredScope.aspx


http://msdn.microsoft.com/en-us/library/ff512758.aspx

sábado, 28 de enero de 2012

Configuración correcta de ULS (Diagnostic Log)

En primer lugar, consideramos que los registros de ULS están diseñados con un propósito singular en cuenta: Para permitir que un administrador identifique y resuleva problemas en SharePoint. No se utilizan para ningún otro propósito dentro de SharePoint. Desde esta perspectiva, si el entorno es "perfecto" (si es posible), entonces la mejor respuesta para usted es simplemente apagarlo. Consumen una pequeña cantidad del sistema de recursos del sistema, y pueden consumir una cantidad considerable de espacio en disco.

Por otro lado, algunos clientes lo tienen seteado a verbose (detallado),todo el tiempo. Esto es un poco ridículo, si no estás investigando un problema. Está consumiendo enormes cantidades de espacio en disco y recursos del sistema potencialmente significativo y el rendimiento un poco degradado para los usuarios finales para capturar los datos que no tienen interés en realidad de mirarlo. Le sugiero que restablecer la configuración predeterminada o incluso apagar esta funcionalidad.

domingo, 8 de enero de 2012

Mover el directorio de logs de Sharepoint

For production SharePoint 2010 servers, the C drive should be at least 80 GB.

When I do SharePoint 2010 installs I always recommend to my customers that they have a secondary drive. That drive serves a few purposes, and one of them is to serve as a place to store stuff you can move off of your C drive. SharePoint’s logs are a great candidate for that.

There are two sets of logs you want to move, the diagnostic logs and the usage logs. An important note is that every machine in the farm must have the same paths for this to work. If one doesn’t have a D drive or something SharePoint will freak out.