Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
VBS:Обработчик текстовых логов, вставка полученных данных в Oracle
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток. Необходимо: VBS обработчик текстовых логов, который умеет вставлять полученные данные, из лог-файлов, в Oracle. Имеется: - лог-файлы такого типа: "ex10091011.log" (создан сервером 10.09.2010, с чего следует, что в имени файла сначало стоит год, месяц, число, и "11" - время, когда был создан лог в часах), которые находятся в определенной папке (к примеру С:\Logs\) - в каждом из этих файлов первые 4 строки считывать ненужно (Там находится информация за знаком "#" о том, что это за лог, и кто его создал, и какие поля он в себе содержит через разделитель пробел) Вот и само содержание лог-файла: Код: plaintext 1. 2. 3. 4. 5. - в Oracle создана таблица (STATS_SITE) с такими же полями что и в лог-файле: | DATA | TIME | CS_METHOD | CS_URI_STEM | CS_URI_QUERY | S_PORT | C_IP | CS_HOST | SC_STATUS | SC_SUBSTATUS | SC_BYTES | CS_BYTES | TIME_TAKEN | (Разделитель "|" вставлен для удобства чтения) Постановка задачи: - считать каждое поле с каждой строки лог-файла(2010-09-20, 11:04:29, GET, /index.html, 8080, 127.0.0.1, test.com.ua:8080, 200, 0, 3902, 724, 312) и добавить в таблицу оракла STATS_SITE по соответственным полям. Например: - в строке №5 первое поле, до первого пробела, имеет вид 2010-09-10 , его нужно считать с лога и добавить в Oracle таблицу STATS_SITE в ячейку DATA , ну и так дальше... Мои размышления. Часть 1 . Первое что лучше сделать - скопировать из папки, куда генерируются лог-файлы сервером, все логи, к примеру за сутки, в новую папку - "Temp"(в этой папке будут содержатся те лог-файлы которые были созданы в период между последними запусками скрипта), если скопировать один из логов не удалость, то и фиг с ним пусть остается, поскольку планировщик позже запустит скрипт снова и занятый процессом лог-файл уже будет свободен. Дальше очистить корневую папку (С:\Logs\ - это делается для очистки диска на котором работает сервер, ибо с практики этих лог-файлов потом создается на сотни мегабайт, что очень плохо), потом создать еще одну папку "AllLogs" - в ней будут хранится логи за период одного месяца и каждые 30 дней очищятся, мало ли, а вдруг сервер оракла упадет. Эту часть я решил. Скрипт создан и чудесно работает. ;) Часть 2 . Процес считывания лог-файла. Теоретически понятно, что нужно использовать FSO, но как описать нужные мне поля?Создать временный файл и записать построчно все поля, разделенные в каждой строке пробелом, что нужны мне и сделать запрос в базу, но как это сделать максимально безболезненно? Если позволите я выложу где я "хожу" вокруг да около, а вы если не сложно подскажите практическими примерами что да как... Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. Код с ошибками, "возможно" специальными... Это сделанно с целью отсеивания ответов вида: "да зайди в гугл там все есть", "учите матчасть" и т.д. и т.п. Мне нужны практические примеры! З.Ы. Человек который дельно поможет не останется без материального "Спасибо"! ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2010, 23:22 |
|
||
|
VBS:Обработчик текстовых логов, вставка полученных данных в Oracle
|
|||
|---|---|---|---|
|
#18+
Посторонние размышления... MSSQL сервер позволит затянуть такие данные в таблицу непосредственно из текстового файла, описав распределение по полям и типы данных средствами импортера. С Ораклом не работал, но, насколько знаю, он не уступает MSSQL по функционалу, то есть такие средства там тоже должны быть. То, что это будет на пару порядков быстрее для такого объемного файла (который обычно представляют собой логи трафика) - факт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2010, 10:07 |
|
||
|
VBS:Обработчик текстовых логов, вставка полученных данных в Oracle
|
|||
|---|---|---|---|
|
#18+
Вот это if (count > 13) Then непонятно, зачем. Лог может плавать? Ну и первые 4 строки ведь не нужны - тогда Do Until idx <> 4 вероятно надо. Ещё можно построчно читать lastString = objTextFile.Readline 'читаем посторочно но тогда в Вашем случае надо дополнительно анализировать начало строки или номер строки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2010, 10:44 |
|
||
|
VBS:Обработчик текстовых логов, вставка полученных данных в Oracle
|
|||
|---|---|---|---|
|
#18+
Progressive, Вообще, честно говоря, не очень понятно, в чем вопрос, если использовать ваш код, а не стандартный импортер: Ну очевидно, что инициализационные процессы с базой должны быть до начала цикла, а строка "INSERT INTO...." внутри цикла (там где у вас вопрос про какую-то переменную i, которой в коде нет) - но это, полагаю, те "намеренные" ошибки, которые вы внесли. Если правильно расположить вставку в БД - по идее этот код должен работать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2010, 13:44 |
|
||
|
VBS:Обработчик текстовых логов, вставка полученных данных в Oracle
|
|||
|---|---|---|---|
|
#18+
Shocker.Pro по идее этот код должен работать. Разумеется, как сказал Хьюго, читать файл надо построчно, зачем грузить жуткие мегабайты в память одним махом? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2010, 13:46 |
|
||
|
VBS:Обработчик текстовых логов, вставка полученных данных в Oracle
|
|||
|---|---|---|---|
|
#18+
В принципе все проблемы решил кроме одной. Нужен СкипЛайн который будет игнорировать строки начинающиеся на знак "#" Пока добился пропускание строк обычным text.SkipLine Вот собственно и код: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. Кстати с построчным считыванием тоже сижу думаю как лучше сделать... Может что посоветуете? Считывание текстового файла должно начатся с первой строки но с исключением знака "#", тобишь если строка начинается на символ "#", то она не обрабатывается а просто пропускается (Skip or SkipLine). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2010, 16:24 |
|
||
|
VBS:Обработчик текстовых логов, вставка полученных данных в Oracle
|
|||
|---|---|---|---|
|
#18+
А в чем проблема-то? Прочитать строку, LEFT-ом проверить первый символ, если он "#", просто не сплитить и не писать ее в базу, а переходить к следующей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2010, 16:55 |
|
||
|
VBS:Обработчик текстовых логов, вставка полученных данных в Oracle
|
|||
|---|---|---|---|
|
#18+
А зачем Dim data и т.д. внутри цикла? Оно и так примет значения из массива, зачем лишний раз обнулять? Строк то ведь не 10 - заметно время занимает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2010, 17:11 |
|
||
|
VBS:Обработчик текстовых логов, вставка полученных данных в Oracle
|
|||
|---|---|---|---|
|
#18+
Читаем построчно: Do While objTS.AtEndOfStream <> True tempStr = objTS.ReadLine() objOTS.Write Replace(tempStr,".","-") & "/" & tempStr & vbCrLf Loop ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2010, 17:13 |
|
||
|
VBS:Обработчик текстовых логов, вставка полученных данных в Oracle
|
|||
|---|---|---|---|
|
#18+
Ну в принципе более менее вопрос решен... А вы не подскажите как обрабатывать все лог-файлы которые находятся в папке по очереди, там по дате создания например или другому атрибуту? К примеру есть папка Temp а в ней штук 30 файлов разришения *.log и во всех одинаковая структура, само собой! Вот названия к примеру: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Вот такой вид будет файлов в папке. И вот как бы каждый обработать этим скриптом что я написал. Не будешь жеш менять ручьками название лог-файла в скрипте каждый рас... Кто что думает по этому поводу? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2010, 22:05 |
|
||
|
VBS:Обработчик текстовых логов, вставка полученных данных в Oracle
|
|||
|---|---|---|---|
|
#18+
Progressive, вот пример перебора файлов именно vbs-скрипт: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2010, 22:13 |
|
||
|
VBS:Обработчик текстовых логов, вставка полученных данных в Oracle
|
|||
|---|---|---|---|
|
#18+
Ну что ж друзья держите еще некоторые доработки. - добавил логирование работы самого скрипта с перезаписю лога при каждом новом запуске - поменял структуру скрипта, для удобства чтения ВНИМАНИЕ! Вопросы: №1 - как правильней написать функцию удаления обработанных файлов, при условии что запрос в БД прошел успешно №2 - как исключить из считывания лог-файла целую строку что начинается на знак "#", пробовал и Left'ом , но при этом ругается на UBound(неправильный тип переменной stringArray). Сам код: (он рабочий, но вот нужно усовершенствовать) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2010, 17:06 |
|
||
|
VBS:Обработчик текстовых логов, вставка полученных данных в Oracle
|
|||
|---|---|---|---|
|
#18+
Progressive, №2 - как исключить из считывания - но Вы ведь уже всё прочитали в ReadAll. Имхо теперь только выкидывать из обработки: if Len(lastString) > 0 and left(laststring,1)<>"#" Then ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2010, 23:32 |
|
||
|
VBS:Обработчик текстовых логов, вставка полученных данных в Oracle
|
|||
|---|---|---|---|
|
#18+
Hugo121Progressive, №2 - как исключить из считывания - но Вы ведь уже всё прочитали в ReadAll. Имхо теперь только выкидывать из обработки: if Len(lastString) > 0 and left(laststring,1)<>"#" Then А я так делал, не выкидывает с обработки :( Делаю в режиме отладки и вижу как целая строка типа: #Fields: date time cs-method cs-uri-stem cs-uri-query s-port c-ip cs-host sc-status sc-substatus sc-bytes cs-bytes time-taken Не пропускается, а обрабатывается спокойно, как будто никто ее и не ограничивал... Может необходимо задать код символа "#" ? Правда я ее не знаю))) Пробовал построчное считывание вот так: Код: plaintext 1. 2. 3. 4. 5. 6. Но таким образом считывает только последнюю строку из файла и все! Но таким методом он хоть видит что строка начинается на "#" и пропускает ее... :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2010, 12:40 |
|
||
|
VBS:Обработчик текстовых логов, вставка полученных данных в Oracle
|
|||
|---|---|---|---|
|
#18+
Progressive, возможно, когда Вы делаете stringArray = Split(text.ReadAll, Chr(13), -1, 1) то другие символы конца строки приклеиваются в начало следующей строки. Выведите в дебуг mid(lastString,1,1) mid(lastString,2,1) mid(lastString,3,1) где там это # лежит? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2010, 23:27 |
|
||
|
VBS:Обработчик текстовых логов, вставка полученных данных в Oracle
|
|||
|---|---|---|---|
|
#18+
или так попробуйте бить Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2010, 23:29 |
|
||
|
VBS:Обработчик текстовых логов, вставка полученных данных в Oracle
|
|||
|---|---|---|---|
|
#18+
Progressive, обработчик текстовых логов, который умеет вставлять полученные данные, из лог-файлов, в Oracle (на буржуйском), примерно то-же на понятном . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2010, 00:43 |
|
||
|
VBS:Обработчик текстовых логов, вставка полученных данных в Oracle
|
|||
|---|---|---|---|
|
#18+
Чего только люди не придумают, чтобы Перл не учить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2010, 00:59 |
|
||
|
VBS:Обработчик текстовых логов, вставка полученных данных в Oracle
|
|||
|---|---|---|---|
|
#18+
Проставляем в Test.vbs путь к файлу MyLogFile.txt и запускаем: Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2010, 08:52 |
|
||
|
VBS:Обработчик текстовых логов, вставка полученных данных в Oracle
|
|||
|---|---|---|---|
|
#18+
Почему-то архивчик не вставился... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2010, 08:52 |
|
||
|
VBS:Обработчик текстовых логов, вставка полученных данных в Oracle
|
|||
|---|---|---|---|
|
#18+
Hugo121или так попробуйте бить Код: plaintext 1. Вот оно! Как я мог упустить этот момент :(( ... Вы абсолютно правы! Спасибо огромное. Теперь все работает :) Я вот кстати что подумал, а если название папки где лежат логи переименуется, то тогда обработчик не сработает, надо бы проработать этот момент... Может написать функцию что-то типа поисковика нужного типа лог-файлов, или задавать путь посредством командной строки в самом vbs-нике...Как считаете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2010, 10:09 |
|
||
|
VBS:Обработчик текстовых логов, вставка полученных данных в Oracle
|
|||
|---|---|---|---|
|
#18+
Вот рабочий скрипт. Может кому понадобится. Данный скрипт я вкидываю в менеджер автозапуска и он по заданным параметрам в командной строке выполняет все операции. Поэтому и поубирал все строгие привязки к файлам и папкам. Может кто напомнит как вывести в командной строке все выполняемые операции скрипта? Вывод конечного результат это понятно, просто вывести лог файл, а вот именно отображения процесса, аля "Выполнено Х%". Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2010, 15:01 |
|
||
|
|

start [/forum/topic.php?fid=60&msg=36862308&tid=2159371]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
43ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
| others: | 233ms |
| total: | 378ms |

| 0 / 0 |
