Привет всем. Хочу сегодня рассказать, как можно создавать свои собственные правила в анализаторе Sharepoint 2010. Стандартных методов нет, потому прийдётся применить навыки программирования. В начале в кратце расскажу вообще про эту систему, которая появилась в Sharepoint 2010.
Microsoft SharePoint Server 2010 содержит анализатор исправности SharePoint, который позволяет диагностировать и устранять ошибки конфигурации, производительности и использования. Анализатор исправности SharePoint применяет предварительно определенные правила исправности на серверах фермы. Правило исправности выполняет проверку и возвращает окно с результатами проверки. Для просмотра предупреждений и устранения ошибок необходимо использовать центр администрирования.
Помимо интерфейсного просмотра работоспособности, можно использовать команды PowerShell. Можно использовать Windows PowerShell для фильтрации данных, отображения их в различными способами и вывода данных в массив, в котором можно фильтровать, сортировать, группировать данные и экспортировать их в Microsoft Excel 2010.
Также можно использовать Windows PowerShell для просмотра и фильтрации событий журнала. Нельзя просматривать или фильтровать события журнала с помощью центра администрирования.
Для этого необходимо выполнить следующие команды:
1. Убедитесь в соответствии следующим минимальным требованиям: См. Add-SPShellAdmin.
2. В меню Пуск выберите пункт Все программы.
3. Выберите пункт Продукты Microsoft SharePoint 2010.
4. Щелкните компонент Командная консоль SharePoint 2010.
5. В командной строке Windows PowerShell введите одну из следующих команд:
- Все события трассировки: Get-SPLogEvent
Get-SPLogEvent
- По уровню: Get-SPLogEvent | Where-Object {$_.Level –eq
Get-SPLogEvent | Where-Object {$_.Level –eq
[Information | Warning | Error | Critical | Verbose | Unexpected |
Monitorable | High | Medium]}
- По области: Get-SPLogEvent | Where-Object {$_.Area -eq <Area>}где <область> — значение свойства Area.
Get-SPLogEvent | Where-Object {$_.Area -eq <Area>}
- По категории: Get-SPLogEvent | Where-Object {$_.Category -eq <Category>где <категория> — значение свойства Category.
Get-SPLogEvent | Where-Object {$_.Category -eq <Category>
- По идентификатору события: Get-SPLogEvent | Where-Object {$_.EventID -eq <EventID>}где <код события> — значение свойства EventID.
Get-SPLogEvent | Where-Object {$_.EventID -eq <EventID>}
- По тексту сообщения: Get-SPLogEvent | Where-Object {$_.Message -like “*<string>*”}где <строка> — строка в сообщении события.
Get-SPLogEvent | Where-Object {$_.Message -like “*<string>*”}
- По процессу: Get-SPLogEvent | Where-Object {$_.Process -like “*<Process>*”}где <процесс> — значение свойства Process.
Get-SPLogEvent | Where-Object {$_.Process -like “*<Process>*”}
Давайте сейчас попробуем создать своё собственное правило. Правила Health реализуются в класе
SPHealthAnalysisRule или SPRepairableHealthAnalysisRule, у которых есть метод проверки Check(), при вызове которого он возвращает строку неисправности. А также есть метод исправления неисправности. Это метод Repair().
Для добавления своего правила на наш сервер Sharepoint 2010 необходимо:
1. Создать свой класс и откомпилировать его в виде dll со строгой подписью.
2. Поместить эту библиотеку в наш GAC
3. Запустить тулзу PowerShell и выполнить следующую команду:
$loc=”C:\mydlllocation.dll”$asm=[System.Reflection.Assembly]::LoadFrom($loc) <- $asm should be GAC’d[Microsoft.SharePoint.Administration.Health.SPHealthAnalyzer]::RegisterRules($asm)
После этого мы увидим наше правило в списке правил. Теперь давайте создадим класс.
Для этого нам надо выполнить следующие команды:
1. Открыть Visual Studio под правами Администратора.
2. Создать новый проект библиотеки
3. Далее открыть свойства проекта и выбрать раздел Подпись и указать строгое имя.
4. Далее добавить в пространство имён Microsoft.SharePoint.dll. Библиотека находиться по адресу %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\ISAPI\Microsoft.SharePoint.dll
5. Добавить using Microsoft.SharePoint.Administration.Health;
6. Далее напишем код, который будет проверять наши диски на заполненность.
using System;using System.Collections.Generic;using System.IO;using System.Text;using Microsoft.SharePoint.Administration;using Microsoft.SharePoint.Administration.Health;
namespace Samples.HealthRules{ public class DiskDriveAlmostFull: SPHealthAnalysisRule { private List<DriveInfo> m_FailingDrives = new List<DriveInfo>();
public override string Summary { get { return "One or more disk drives are running out of free space."; } }
public override string Explanation { get { StringBuilder sb = new StringBuilder(); foreach (DriveInfo drive in this.m_FailingDrives) { sb.AppendFormat("{0} ({1}), ", drive.VolumeLabel, drive.Name); } if (sb.Length > 2) sb.Remove(sb.Length - 2, 2);
return string.Concat( "The following drives on the failing servers have less than 10GB free: ", sb); } }
public override string Remedy { get { return "Examine the failing servers and delete old logs or free space on the drives."; } } public override SPHealthCategory Category { get { return SPHealthCategory.Availability; } }
public override SPHealthCheckErrorLevel ErrorLevel { get { return SPHealthCheckErrorLevel.Error; } }
public override SPHealthAnalysisRuleAutomaticExecutionParameters AutomaticExecutionParameters { get { SPHealthAnalysisRuleAutomaticExecutionParameters retval = new SPHealthAnalysisRuleAutomaticExecutionParameters(); retval.Schedule = SPHealthCheckSchedule.Daily; retval.Scope = SPHealthCheckScope.All; retval.ServiceType = typeof(SPTimerService); return retval; } } public override SPHealthCheckStatus Check() { const long bytesInGb = 1024 * 1024 * 1024;
if (!SPFarm.Joined) throw new InvalidOperationException();
foreach (DriveInfo di in DriveInfo.GetDrives()) { try { if (!(di.IsReady && di.DriveType == DriveType.Fixed)) continue;
if (di.TotalFreeSpace < 10 * bytesInGb) this.m_FailingDrives.Add(di); } catch (IOException) { } }
if (this.m_FailingDrives.Count == 0) return SPHealthCheckStatus.Passed; else return SPHealthCheckStatus.Failed; } }}
Вот и всё. После всё будет работать.