Pengelogan <ODBC odbcLogging>

Gambaran Umum

Elemen mengonfigurasi <odbcLogging> pengelogan Open Database Connectivity (ODBC) untuk Internet Information Services (IIS) 7. Pengelogan ODBC merekam semua aktivitas HTTP ke database yang ditentukan pengguna alih-alih ke file teks.

Pengelogan ODBC diimplementasikan sebagai modul pengelogan kustom di IIS 7, oleh karena itu mengaktifkan dan mengonfigurasi pengelogan ODBC di IIS 7 terdiri dari dua tindakan terpisah:

  • Mengatur atribut pengelogan ODBC dalam <odbcLogging> elemen . Secara khusus, atribut berikut harus dikonfigurasi:

    • Atribut dataSource harus menentukan Nama Sumber Data Sistem (DSN) untuk database tempat tabel yang ditentukan oleh atribut tableName berada.
    • Atribut kata sandi harus menentukan kata sandi database yang akan digunakan IIS 7 saat menulis informasi log ke database.
    • Atribut tableName harus menentukan nama tabel database dalam database yang ditentukan oleh atribut dataSource .
    • Atribut userName harus menentukan nama pengguna database yang akan digunakan IIS 7 saat menulis informasi log ke database.
  • Mengatur atribut pengelogan kustom yang <benar di elemen logFile> . Secara khusus, atribut berikut harus dikonfigurasi:

    • Atribut logFormat harus diatur ke "Kustom."
    • Atribut customLogPluginClsid harus diatur ke "{FF16065B-DE82-11CF-BC0A-00AA006111E0}"

Secara default, IIS 7 mencatat semua aktivitas ke file teks yang menggunakan format file log yang diperluas W3C, dan secara default Anda dapat mengonfigurasi IIS untuk menggunakan format file teks lainnya seperti format NCSA atau IIS asli. Kerugian utama menggunakan format berbasis teks ini adalah bahwa mereka lebih sulit untuk mengurai aktivitas, dan umumnya memerlukan utilitas seperti LogParser Microsoft untuk mengambil informasi yang berguna dari log Anda. Selain itu, performa penguraian data dengan file teks juga biasanya jauh lebih lambat daripada menggunakan database. Namun, pengelogan berbasis teks dilakukan dalam mode kernel, yang meningkatkan performa untuk permintaan pengelogan.

Saat Anda menggunakan pengelogan ODBC, aktivitas server Anda disimpan dalam database, yang akan sangat meningkatkan pengambilan data. Ini memperluas kemungkinan untuk menggunakan berbagai klien database saat penggalian data aktivitas server Anda. Kerugian utama untuk menggunakan pengelogan ODBC adalah performa untuk pengelogan karena ketika pengelogan ODBC diaktifkan, IIS menonaktifkan cache mode kernel. Untuk alasan ini, menerapkan pengelogan ODBC dapat menurunkan performa server secara keseluruhan.

Catatan

Untuk membuat tabel untuk pengelogan ODBC, Anda dapat menggunakan file "%windir%\System32\inetsrv\logtemp.sql" yang disediakan dengan IIS 7. Untuk informasi selengkapnya tentang pengelogan ODBC, lihat Artikel Pangkalan Pengetahuan Microsoft 245243.

Kompatibilitas

Versi Catatan
IIS 10.0 Elemen <odbcLogging> tidak dimodifikasi di IIS 10.0.
IIS 8.5 Elemen <odbcLogging> tidak dimodifikasi di IIS 8.5.
IIS 8.0 Elemen <odbcLogging> tidak dimodifikasi di IIS 8.0.
IIS 7.5 Elemen <odbcLogging> tidak dimodifikasi dalam IIS 7.5.
IIS 7.0 Elemen <odbcLogging> ini diperkenalkan di IIS 7.0.
IIS 6.0 Atribut <odbcLogging> elemen menggantikan properti metabase IIS 6.0 berikut:
  • LogOdbcDataSource
  • LogOdbcPassword
  • LogOdbcTableName
  • LogOdbcUserName

Siapkan

Elemen <odbcLogging> tidak tersedia pada penginstalan default IIS 7 dan yang lebih baru. Untuk menginstalnya, gunakan langkah-langkah berikut.

Windows Server 2012 atau Windows Server 2012 R2

  1. Pada taskbar, klik Manajer Server.
  2. Di Manajer Server, klik menu Kelola , lalu klik Tambahkan Peran dan Fitur.
  3. Di wizard Tambahkan Peran dan Fitur , klik Berikutnya. Pilih jenis penginstalan dan klik Berikutnya. Pilih server tujuan dan klik Berikutnya.
  4. Pada halaman Peran Server , perluas Server Web (IIS), perluas Server Web, perluas Kesehatan dan Diagnostik, lalu pilih Pengelogan ODBC. Klik Berikutnya.
    Cuplikan layar memperlihatkan fitur Kesehatan dan Diagnostik untuk Windows Server 2012 atau Windows Server 2012 R2 dengan Pengelogan O D B C dipilih. .
  5. Pada halaman Pilih fitur, klik Berikutnya.
  6. Pada halaman Konfirmasi pilihan instalasi, klik Instal.
  7. Pada halaman Hasil , klik Tutup.

Windows 8 atau Windows 8.1

  1. Pada layar Mulai, pindahkan penunjuk ke sudut kiri bawah, klik kanan tombol Mulai, lalu klik Panel Kontrol.
  2. Di Panel Kontrol, klik Program dan Fitur, lalu klik Aktifkan atau nonaktifkan fitur Windows.
  3. Perluas Layanan Informasi Internet, perluas World Wide Web Services, perluas Kesehatan dan Diagnostik, lalu pilih Pengelogan ODBC.
    Cuplikan layar memperlihatkan fitur Kesehatan dan Diagnostik untuk Windows 8 atau Windows 8.1 dengan Pengelogan O D B C dipilih.
  4. Klik OK.
  5. Klik Tutup.

Windows Server 2008 atau Windows Server 2008 R2

  1. Pada taskbar, klik Mulai, arahkan ke Alat Administratif, lalu klik Manajer Server.
  2. Di panel hierarki Manajer Server , perluas Peran, lalu klik Server Web (IIS).
  3. Di panel Server Web (IIS), gulir ke bagian Layanan Peran , lalu klik Tambahkan Layanan Peran.
  4. Pada halaman Pilih Layanan Peran dari Wizard Tambahkan Layanan Peran, pilih Pengelogan ODBC, lalu klik Berikutnya.
    Cuplikan layar memperlihatkan fitur Kesehatan dan Diagnostik untuk Windows Server 2008 atau Windows Server 2008 R2 dengan Pengelogan O D B C dipilih.
  5. Pada halaman Konfirmasi Pilihan Penginstalan , klik Instal.
  6. Pada halaman Hasil , klik Tutup.

Windows Vista atau Windows 7

  1. Pada taskbar, klik Mulai, lalu klik Panel Kontrol.
  2. Di Panel Kontrol, klik Program dan Fitur, lalu klik Aktifkan atau nonaktifkan Fitur Windows.
  3. Perluas Layanan Informasi Internet, lalu pilih Pengelogan ODBC, lalu klik OK.
    Cuplikan layar memperlihatkan fitur Kesehatan dan Diagnostik untuk Windows Vista atau Windows 7 dengan Pengelogan O D B C dipilih.

Bagaimana Caranya

Tidak ada antarmuka pengguna untuk mengonfigurasi pengelogan ODBC untuk IIS 7. Untuk contoh cara mengonfigurasi pengelogan ODBC secara terprogram, lihat bagian Sampel Kode dari dokumen ini.

Konfigurasi

Atribut

Atribut Deskripsi
dataSource Atribut string opsional. Menentukan Nama Sumber Data Sistem (DSN) untuk database tempat log ditulis.

Nilai defaultnya adalah InternetDb.
password Atribut string opsional. Menentukan kata sandi database ODBC yang Anda gunakan saat menulis informasi ke database selama pengelogan peristiwa. Secara default, nilai ini dienkripsi.

Nilai defaultnya adalah [enc:AesProvider::enc].
tableName Atribut string opsional. Menentukan nama tabel database ODBC tempat Windows menulis informasi selama pengelogan peristiwa.

Nilai defaultnya adalah InternetLog.
userName Atribut string opsional. Menentukan nama pengguna database ODBC yang digunakan untuk menulis informasi ke database selama pengelogan peristiwa.

Nilai defaultnya adalah InternetAdmin.

Elemen Anak

Tidak ada.

Sampel Konfigurasi

Sampel konfigurasi pertama untuk Situs Web Default ini mengonfigurasi atribut dalam <odbcLogging> elemen yang menentukan sistem DSN, nama tabel, nama pengguna, dan kata sandi untuk koneksi pengelogan ODBC.

<location path="Default Web Site">
   <system.webServer>
      <odbcLogging dataSource="InternetDb"
         tableName="InternetLog"
         userName="InternetAdmin"
         password="[enc:AesProvider:57686f6120447564652c2049495320526f636b73:enc]" />
   </system.webServer>
</location>

Sampel konfigurasi kedua ini mengonfigurasi atribut pengelogan kustom yang benar dalam <elemen logFile> yang memungkinkan pengelogan ODBC untuk Situs Web Default.

<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>

Kode Sampel

Sampel kode berikut mengonfigurasi dua set opsi untuk Situs Web Default:

  • Paruh pertama dari setiap sampel mengonfigurasi atribut dalam <odbcLogging> elemen yang menentukan sistem DSN, nama tabel, nama pengguna, dan kata sandi untuk koneksi pengelogan ODBC.
  • Paruh kedua dari setiap sampel menentukan atribut pengelogan kustom dalam <elemen logFile> yang mengaktifkan pengelogan 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

Catatan

Anda harus memastikan untuk mengatur parameter penerapan ke apphost saat Anda menggunakan AppCmd.exe untuk mengonfigurasi pengaturan ini. Ini menerapkan pengaturan konfigurasi ke bagian lokasi yang sesuai dalam file 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