ODBC Logging <odbcLogging>
Panoramica
L'elemento <odbcLogging>
configura la registrazione ODBC (Open Database Connectivity) per Internet Information Services (IIS) 7. La registrazione ODBC registra tutte le attività HTTP in un database definito dall'utente anziché in file di testo.
La registrazione ODBC viene implementata come modulo di registrazione personalizzato in IIS 7, pertanto l'abilitazione e la configurazione della registrazione ODBC in IIS 7 sono costituite da due azioni separate:
Impostazione degli attributi di registrazione ODBC nell'elemento
<odbcLogging>
. In particolare, è necessario configurare gli attributi seguenti:- L'attributo dataSource deve specificare il nome dell'origine dati di sistema (DSN) per il database in cui si trova la tabella specificata dall'attributo tableName .
- L'attributo password deve specificare la password del database che IIS 7 userà durante la scrittura delle informazioni di log nel database.
- L'attributo tableName deve specificare il nome della tabella di database nel database specificato dall'attributo dataSource .
- L'attributo userName deve specificare il nome utente del database che IIS 7 userà durante la scrittura delle informazioni di log nel database.
Impostazione degli attributi di registrazione personalizzati corretti nell'elemento <logFile> . In particolare, è necessario configurare gli attributi seguenti:
- L'attributo logFormat deve essere impostato su "Custom".
- L'attributo customLogPluginClsid deve essere impostato su "{FF16065B-DE82-11CF-BC0A-00AA006111E0}"
Per impostazione predefinita, IIS 7 registra tutte le attività nei file di testo che usano il formato di file di log esteso W3C e per impostazione predefinita è possibile configurare IIS per l'uso di altri formati di file di testo, ad esempio NCSA o il formato IIS nativo. Lo svantaggio principale dell'uso di questi formati basati su testo è che sono più difficili da analizzare per l'attività e in genere richiedono un'utilità come LogParser di Microsoft per recuperare eventuali informazioni utili dai log. Inoltre, le prestazioni di analisi dei dati con i file di testo sono in genere molto più lente rispetto all'uso di un database. Tuttavia, la registrazione basata su testo viene eseguita in modalità kernel, che migliora le prestazioni per la registrazione delle richieste.
Quando si usa la registrazione ODBC, l'attività del server viene archiviata in un database, che dovrebbe migliorare notevolmente il recupero dei dati. In questo modo si espande la possibilità di usare un'ampia gamma di client di database durante l'attività del server di data mining. Lo svantaggio principale dell'uso della registrazione ODBC è rappresentato dalle prestazioni per la registrazione perché quando la registrazione ODBC è abilitata, IIS disabilita la cache in modalità kernel. Per questo motivo, l'implementazione della registrazione ODBC può ridurre le prestazioni complessive del server.
Nota
Per creare la tabella per la registrazione ODBC, è possibile usare il file "%windir%\System32\inetsrv\logtemp.sql" fornito con IIS 7. Per altre informazioni sulla registrazione ODBC, vedere l'articolo della Microsoft Knowledge Base 245243.
Compatibilità
Versione | Note |
---|---|
IIS 10.0 | L'elemento <odbcLogging> non è stato modificato in IIS 10.0. |
IIS 8,5 | L'elemento <odbcLogging> non è stato modificato in IIS 8.5. |
IIS 8,0 | L'elemento <odbcLogging> non è stato modificato in IIS 8.0. |
IIS 7,5 | L'elemento <odbcLogging> non è stato modificato in IIS 7.5. |
IIS 7.0 | L'elemento <odbcLogging> è stato introdotto in IIS 7.0. |
IIS 6.0 | Gli attributi dell'elemento <odbcLogging> sostituiscono le proprietà della metabase IIS 6.0 seguenti:
|
Installazione
L'elemento <odbcLogging>
non è disponibile nell'installazione predefinita di IIS 7 e versioni successive. Per installarlo, seguire questa procedura.
Windows Server 2012 o Windows Server 2012 R2
- Sulla barra delle applicazioni fare clic su Server Manager.
- In Server Manager fare clic sul menu Gestisci e quindi su Aggiungi ruoli e funzionalità.
- Nella procedura guidata Aggiungi ruoli e funzionalità fare clic su Avanti. Selezionare il tipo di installazione e fare clic su Avanti. Selezionare il server di destinazione e fare clic su Avanti.
- Nella pagina Ruoli server espandere Server Web (IIS), server Web, server Web, integrità e diagnostica e quindi selezionare Registrazione ODBC. Fare clic su Avanti.
. - Nella pagina Selezione funzionalità fare clic su Avanti.
- Nella pagina Conferma selezioni per l'installazione fare clic su Installa.
- Nella pagina Risultati fare clic su Chiudi.
Windows 8 o Windows 8.1
- Nella schermata Start spostare il puntatore fino all'angolo inferiore sinistro, fare clic con il pulsante destro del mouse sul pulsante Start e quindi scegliere Pannello di controllo.
- In Pannello di controllo fare clic su Programmi e funzionalità e quindi su Attiva o disattiva funzionalità di Windows.
- Espandere Internet Information Services, servizi Web a livello globale, integrità e diagnostica, quindi selezionare Registrazione ODBC.
- Fare clic su OK.
- Fare clic su Close.
Windows Server 2008 o Windows Server 2008 R2
- Sulla barra delle applicazioni fare clic su Start, scegliere Strumenti di amministrazione, quindi fare clic su Server Manager.
- Nel riquadro della gerarchia Server Manager espandere Ruoli, quindi fare clic su Server Web (IIS).
- Nel riquadro Server Web (IIS) scorrere fino alla sezione Servizi ruolo e quindi fare clic su Aggiungi servizi ruolo.
- Nella pagina Selezione servizi ruolo della Procedura guidata Aggiungi servizi ruolo selezionare Registrazione ODBC e quindi fare clic su Avanti.
- Nella pagina Conferma selezioni per l'installazione fare clic su Installa.
- Nella pagina Risultati fare clic su Chiudi.
Windows Vista o Windows 7
- Sulla barra delle applicazioni fare clic su Start e quindi su Pannello di controllo.
- In Pannello di controllo fare clic su Programmi e funzionalità e quindi su Attiva o disattiva funzionalità di Windows.
- Espandere Internet Information Services, quindi selezionare Registrazione ODBC, quindi fare clic su OK.
Procedure
Non è disponibile alcuna interfaccia utente per la configurazione della registrazione ODBC per IIS 7. Per esempi di come configurare la registrazione ODBC a livello di codice, vedere la sezione Esempi di codice di questo documento.
Configurazione
Attributi
Attributo | Descrizione |
---|---|
dataSource |
Attributo stringa facoltativo. Specifica il nome dell'origine dati di sistema (DSN) per il database in cui viene scritto il log. Il valore predefinito è InternetDb . |
password |
Attributo stringa facoltativo. Specifica la password del database ODBC utilizzata quando si scrivono informazioni nel database durante la registrazione degli eventi. Per impostazione predefinita, questo valore è crittografato. Il valore predefinito è [enc:AesProvider::enc] . |
tableName |
Attributo stringa facoltativo. Specifica il nome della tabella di database ODBC in cui Windows scrive informazioni durante la registrazione degli eventi. Il valore predefinito è InternetLog . |
userName |
Attributo stringa facoltativo. Specifica il nome utente del database ODBC usato per la scrittura di informazioni nel database durante la registrazione eventi. Il valore predefinito è InternetAdmin . |
Elementi figlio
Nessuno.
Esempio di configurazione
Questo primo esempio di configurazione per il sito Web predefinito configura gli attributi nell'elemento <odbcLogging>
che specificano il DSN di sistema, il nome della tabella, il nome utente e la password per una connessione di registrazione ODBC.
<location path="Default Web Site">
<system.webServer>
<odbcLogging dataSource="InternetDb"
tableName="InternetLog"
userName="InternetAdmin"
password="[enc:AesProvider:57686f6120447564652c2049495320526f636b73:enc]" />
</system.webServer>
</location>
Questo secondo esempio di configurazione configura gli attributi di registrazione personalizzati corretti nell'elemento <logFile> che abilitano la registrazione ODBC per il sito Web predefinito.
<site name="Default Web Site" id="1" serverAutoStart="true">
<application path="/" applicationPool="DefaultAppPool">
<virtualDirectory path="/" physicalPath="%SystemDrive%\inetpub\wwwroot" />
</application>
<bindings>
<binding protocol="http" bindingInformation="*:80:" />
</bindings>
<logFile logFormat="Custom"
customLogPluginClsid="{FF16065B-DE82-11CF-BC0A-00AA006111E0}" />
</site>
Codice di esempio
Gli esempi di codice seguenti configurano due set di opzioni per il sito Web predefinito:
- La prima metà di ogni esempio configura gli attributi nell'elemento
<odbcLogging>
che specificano il DSN di sistema, il nome della tabella, il nome utente e la password per una connessione di registrazione ODBC. - La seconda metà di ogni esempio specifica gli attributi di registrazione personalizzati nell'elemento <logFile> che abilitano la registrazione ODBC.
AppCmd.exe
appcmd.exe set config "Default Web Site" -section:system.webServer/odbcLogging /dataSource:"InternetDb" /commit:apphost
appcmd.exe set config "Default Web Site" -section:system.webServer/odbcLogging /tableName:"InternetLog" /commit:apphost
appcmd.exe set config "Default Web Site" -section:system.webServer/odbcLogging /userName:"InternetAdmin" /commit:apphost
appcmd.exe set config "Default Web Site" -section:system.webServer/odbcLogging /password:"P@ssw0rd" /commit:apphost
appcmd.exe set sites "Default Web Site" -logFile.logFormat:"Custom" /commit:apphost
appcmd.exe set sites "Default Web Site" -logFile.customLogPluginClsid:"{FF16065B-DE82-11CF-BC0A-00AA006111E0}" /commit:apphost
Nota
È necessario assicurarsi di impostare il parametro commit su apphost
quando si usa AppCmd.exe per configurare queste impostazioni. Questa operazione esegue il commit delle impostazioni di configurazione nella sezione percorso appropriata nel file di ApplicationHost.config.
C#
using System;
using System.Text;
using Microsoft.Web.Administration;
internal static class Sample
{
private static void Main()
{
using (ServerManager serverManager = new ServerManager())
{
Configuration config = serverManager.GetApplicationHostConfiguration();
ConfigurationSection odbcLoggingSection = config.GetSection("system.webServer/odbcLogging", "Default Web Site");
odbcLoggingSection["dataSource"] = @"InternetDb";
odbcLoggingSection["tableName"] = @"InternetLog";
odbcLoggingSection["userName"] = @"InternetAdmin";
odbcLoggingSection["password"] = @"P@ssw0rd";
ConfigurationSection sitesSection = config.GetSection("system.applicationHost/sites");
ConfigurationElementCollection sitesCollection = sitesSection.GetCollection();
ConfigurationElement siteElement = FindElement(sitesCollection, "site", "name", @"Default Web Site");
if (siteElement == null) throw new InvalidOperationException("Element not found!");
ConfigurationElement logFileElement = siteElement.GetChildElement("logFile");
logFileElement["customLogPluginClsid"] = @"{FF16065B-DE82-11CF-BC0A-00AA006111E0}";
logFileElement["logFormat"] = @"Custom";
serverManager.CommitChanges();
}
}
private static ConfigurationElement FindElement(ConfigurationElementCollection collection, string elementTagName, params string[] keyValues)
{
foreach (ConfigurationElement element in collection)
{
if (String.Equals(element.ElementTagName, elementTagName, StringComparison.OrdinalIgnoreCase))
{
bool matches = true;
for (int i = 0; i < keyValues.Length; i += 2)
{
object o = element.GetAttributeValue(keyValues[i]);
string value = null;
if (o != null)
{
value = o.ToString();
}
if (!String.Equals(value, keyValues[i + 1], StringComparison.OrdinalIgnoreCase))
{
matches = false;
break;
}
}
if (matches)
{
return element;
}
}
}
return null;
}
}
VB.NET
Imports System
Imports System.Text
Imports Microsoft.Web.Administration
Module Sample
Sub Main()
Dim serverManager As ServerManager = New ServerManager
Dim config As Configuration = serverManager.GetApplicationHostConfiguration
Dim odbcLoggingSection As ConfigurationSection = config.GetSection("system.webServer/odbcLogging", "Default Web Site")
odbcLoggingSection("dataSource") = "InternetDb"
odbcLoggingSection("tableName") = "InternetLog"
odbcLoggingSection("userName") = "InternetAdmin"
odbcLoggingSection("password") = "P@ssw0rd"
Dim sitesSection As ConfigurationSection = config.GetSection("system.applicationHost/sites")
Dim sitesCollection As ConfigurationElementCollection = sitesSection.GetCollection
Dim siteElement As ConfigurationElement = FindElement(sitesCollection, "site", "name", "Default Web Site")
If (siteElement Is Nothing) Then
Throw New InvalidOperationException("Element not found!")
End If
Dim logFileElement As ConfigurationElement = siteElement.GetChildElement("logFile")
logFileElement("customLogPluginClsid") = "{FF16065B-DE82-11CF-BC0A-00AA006111E0}"
logFileElement("logFormat") = "Custom"
serverManager.CommitChanges()
End Sub
Private Function FindElement(ByVal collection As ConfigurationElementCollection, ByVal elementTagName As String, ByVal ParamArray keyValues() As String) As ConfigurationElement
For Each element As ConfigurationElement In collection
If String.Equals(element.ElementTagName, elementTagName, StringComparison.OrdinalIgnoreCase) Then
Dim matches As Boolean = True
Dim i As Integer
For i = 0 To keyValues.Length - 1 Step 2
Dim o As Object = element.GetAttributeValue(keyValues(i))
Dim value As String = Nothing
If (Not (o) Is Nothing) Then
value = o.ToString
End If
If Not String.Equals(value, keyValues((i + 1)), StringComparison.OrdinalIgnoreCase) Then
matches = False
Exit For
End If
Next
If matches Then
Return element
End If
End If
Next
Return Nothing
End Function
End Module
JavaScript
var adminManager = new ActiveXObject('Microsoft.ApplicationHost.WritableAdminManager');
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST";
var odbcLoggingSection = adminManager.GetAdminSection("system.webServer/odbcLogging", "MACHINE/WEBROOT/APPHOST/Default Web Site");
odbcLoggingSection.Properties.Item("dataSource").Value = "InternetDb";
odbcLoggingSection.Properties.Item("tableName").Value = "InternetLog";
odbcLoggingSection.Properties.Item("userName").Value = "InternetAdmin";
odbcLoggingSection.Properties.Item("password").Value = "P@ssw0rd";
var sitesSection = adminManager.GetAdminSection("system.applicationHost/sites", "MACHINE/WEBROOT/APPHOST");
var sitesCollection = sitesSection.Collection;
var siteElementPos = FindElement(sitesCollection, "site", ["name", "Default Web Site"]);
if (siteElementPos == -1) throw "Element not found!";
var siteElement = sitesCollection.Item(siteElementPos);
var logFileElement = siteElement.ChildElements.Item("logFile");
logFileElement.Properties.Item("customLogPluginClsid").Value = "{FF16065B-DE82-11CF-BC0A-00AA006111E0}";
logFileElement.Properties.Item("logFormat").Value = "Custom";
adminManager.CommitChanges();
function FindElement(collection, elementTagName, valuesToMatch) {
for (var i = 0; i < collection.Count; i++) {
var element = collection.Item(i);
if (element.Name == elementTagName) {
var matches = true;
for (var iVal = 0; iVal < valuesToMatch.length; iVal += 2) {
var property = element.GetPropertyByName(valuesToMatch[iVal]);
var value = property.Value;
if (value != null) {
value = value.toString();
}
if (value != valuesToMatch[iVal + 1]) {
matches = false;
break;
}
}
if (matches) {
return i;
}
}
}
return -1;
}
VBScript
Set adminManager = WScript.CreateObject("Microsoft.ApplicationHost.WritableAdminManager")
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST"
Set odbcLoggingSection = adminManager.GetAdminSection("system.webServer/odbcLogging", "MACHINE/WEBROOT/APPHOST/Default Web Site")
odbcLoggingSection.Properties.Item("dataSource").Value = "InternetDb"
odbcLoggingSection.Properties.Item("tableName").Value = "InternetLog"
odbcLoggingSection.Properties.Item("userName").Value = "InternetAdmin"
odbcLoggingSection.Properties.Item("password").Value = "P@ssw0rd"
Set sitesSection = adminManager.GetAdminSection("system.applicationHost/sites", "MACHINE/WEBROOT/APPHOST")
Set sitesCollection = sitesSection.Collection
siteElementPos = FindElement(sitesCollection, "site", Array("name", "Default Web Site"))
If (siteElementPos = -1) Then
WScript.Echo "Element not found!"
WScript.Quit
End If
Set siteElement = sitesCollection.Item(siteElementPos)
Set logFileElement = siteElement.ChildElements.Item("logFile")
logFileElement.Properties.Item("customLogPluginClsid").Value = "{FF16065B-DE82-11CF-BC0A-00AA006111E0}"
logFileElement.Properties.Item("logFormat").Value = "Custom"
adminManager.CommitChanges()
Function FindElement(collection, elementTagName, valuesToMatch)
For i = 0 To CInt(collection.Count) - 1
Set element = collection.Item(i)
If element.Name = elementTagName Then
matches = True
For iVal = 0 To UBound(valuesToMatch) Step 2
Set property = element.GetPropertyByName(valuesToMatch(iVal))
value = property.Value
If Not IsNull(value) Then
value = CStr(value)
End If
If Not value = CStr(valuesToMatch(iVal + 1)) Then
matches = False
Exit For
End If
Next
If matches Then
Exit For
End If
End If
Next
If matches Then
FindElement = i
Else
FindElement = -1
End If
End Function