提高日誌存儲
㈠ 阿里雲的高效雲盤擴容到2T就不支持擴容了!
1. 為了方便存儲日誌和轉化透傳點擊,當初選定使用mongodb。於是買了一台ECS伺服器,掛上了300GB高效雲盤,慢慢開始跑廣告業務。
2. 跑了半個月,300GB眼看不夠了,趕緊學習鞏固阿里雲的擴容linux數據盤的操作。
3. 前後擴容到800G,1.4T,最後擴容到2T。再一看,已經不讓擴容了。
4. 尤記得創建雲盤時,有說明不同的雲盤類型支持的最大容量不同。
5.於是翻了翻阿里雲的文檔——ssd和高效雲盤最大支持32T。普通雲盤最大支持2T。
6.於是懷疑難道我購買的是普通雲盤,所以只能擴容到2T?
7. 進入實例中卻看到是高效雲盤啊!那為何不能繼續擴容?
8.於是創建一個新的雲盤試試,發現可以指定2T以上的存儲空間。
9. 回到磁碟擴容頁面,發現2T後,滑鼠懸停過去顯示"當前大於2TB磁碟暫不支持擴容"!
10. 我在想這表示哪怕我之前一下子買了2個T,3個T的高效雲盤,然後想擴容了,是不是也不行?必須得創建數據盤快照,然後恢復到更大的硬碟上?我怎麼對這樣的數據盤快照一點兒都沒有信心呢?
11. 可悲的是,這表明我只能此刻看到mongo伺服器還有500GB存儲空間。以後會越來越少。我將不得不重新考慮存儲方案,一是2T以上的日誌存儲並沒有比以前的文件存儲提高多少價值,反而存儲空間要求更大,每月的純粹存儲費用達到720元以上。這已經是一台性能好的伺服器的價格了。
12. 曾經想過應該在公司內部保留一台伺服器存儲mongo日誌。購買一塊大容量硬碟就好了。但是數據透傳怎麼辦?也在這台伺服器做?還是本地網路掛到公網上?
13. 不得不思考替代的存儲方案了。日誌的用處一是為了透傳,二則是解決一些渠道或這檢測方偶爾提出的問題。也許oss存儲會降低成本,但是如何使用才能更好的滿足我們的需求呢?
㈡ 如何設計日誌採集存儲分析的架構
如何設計日誌採集存儲分析的架構
架構方面:
□ Flume OG有三種角色的節點:代理節點agent、收集節點collector、主節點master
□ agent負責從各個數據源收集日誌數據、將收集到的數據集中到collector,再由collector節點匯總存入到HDFS.而master負責管理agent\collector的活動
□ agent、collector都稱為node,node的角色根據配置的不同分為邏輯節點和物理節點,對於邏輯節點的區分、配置、使用非常復雜.
□ agent、collector由source、sink組成,表示當前節點的數據從source傳送到sink
以上相對於Flume NG來說:
□ Flume NG只有一種角色節點:代理節點agent
□ 沒有collector、master節點,這是最核心的變化.
□ 去除邏輯節點和物理節點的概念和內容
□ agent節點的組成發生變化,由source 、sink、channel三個組件組成
Zookeeper方面:
□ Flume OG的穩定性依賴zookeeper,它需要zookeeper對其多類節點的工作進行管理,雖然OG可以使用內存的方式對各類節點進行管理,但需要用戶忍受機器出現故障時信息丟失的出現.
□ Flume NG的節點角色數量由原來的3個縮減為1個,不存在多類角色的問題,所以不再需要zookeeper對各類節點協調的作用,由此脫離了對zookeeper的依賴.
㈢ 如何實現日誌的集中化存儲以及使用loganalyzer做日誌分析
一、安裝Mysql資料庫
選擇使用編譯好的二進制格式的MySQL程序包
1
mysql-5.5.22-linux2.6-i686.tar.gz
1、創建MySQL的數據存放位置
為了備份日誌方便把數據放在LVM卷中。還可以利用LVM的擴容功能,當我們的空間不夠使用時。
查看,已經存在的卷組是否還有剩餘空間,來創建LV。
1
2
3
[root@mysql local]# vgdisplay | grep -i"PE[[:space:]]*/[[:space:]]*Size"
Alloc PE / Size 6656 / 52.00GiB
Free PE / Size 1023 / 7.99 GiB
說明:還有7.99GB,空間可以創建LV。
注意:
如果存在的文件很大的話,見議我們在創建邏輯卷時最好把PE的大小設置大點。
創建LV
1
2
3
4
root@mysql local]# lvcreate -L 4G -n loglv vg0
Logical volume "loglv" created
[root@mysql local]# lvscan | grep "loglv"
ACTIVE '/dev/vg0/loglv'[4.00 GiB] inherit
格式化邏輯卷loglv
1
2
3
[root@mysql local]# mke2fs -t ext4 -L LOGDATA /dev/vg0/loglv
[root@mysql local]# echo $?
0
掛載邏輯卷
設置開機自動掛載.編輯/etc/fstab文件增加下面一行。
1
/dev/mapper/vg0-loglv /logdata ext4 defaults 0 0
自動掛載測試
1
2
3
root@mysql local]# mount -a
[root@mysql local]# mount | grep"loglv"
/dev/mapper/vg0-loglv on /logdata type ext4(rw)
2、准備好安裝MySQL資料庫的必需條件
(1)、創建用戶mysql,用來被始化資料庫使用的。
說明:最好mysql是系統用戶,這樣就算mysql用戶被人劫持,也無法登陸系統的。
1
2
3
[root@mysql local]# useradd -r mysql
[root@mysql local]# id mysql
uid=399(mysql) gid=399(mysql)groups=399(mysql)
(2)、設置MySQL資料庫的數據存放位置:在/logdata中創建data,且屬主屬組為mysql
1
2
3
4
[root@mysql logdata]# mkdir data
[root@mysql logdata]# chown mysql:mysql./data/
[root@mysql logdata]# ll -d data
drwxr-xr-x 2 mysql mysql 4096 Aug 20 15:40data
3、安裝MySQL資料庫
(1)、把程序包解壓到」/uer/local」目錄,為了後續維護方便並創建一個軟鏈接。
1
2
3
4
5
6
[root@mysql user]# tar -xfmysql-5.5.22-linux2.6-i686.tar.gz -C/usr/local/
[root@mysql user]# cd /usr/local/
[root@mysql local]# ln -svmysql-5.5.22-linux2.6-i686 mysql
`mysql' -> `mysql-5.5.22-linux2.6-i686'
[root@mysql local]# ll | grep mysql
lrwxrwxrwx 1 root root 26 Aug 20 15:03mysql -> mysql-5.5.22-linux2.6-i686
(2)、我們要以:mysql用戶的身份來初始化資料庫,要有許可權操作一些文件所以要修改解壓後Mysql程序的屬主屬組為mysql
1
[root@mysql mysql]# chown -R mysql:mysql./*
說明:安裝完數據後,把屬主改為:root
(3)、初始化資料庫
1
2
3
4
5
[root@node1 mysql]#./scripts/mysql_install_db --datadir=/logdata/data --user=mysql
Installing MySQL system tables...
OK
Filling help tables...
OK
說明:
1
2
--datadir 指定資料庫的數據目錄的位置(不使用默認的位置)
--user 指定初始化資料庫的用戶名(使用二進制格式MySQL程序包一定要使用mysql)
(4)、根據物理機的硬體情況與實際需要選擇MySQL的配置文件
1
2
3
4
5
6
[root@node1 mysql]# ll support-files/*.cnf
-rw-r--r-- 1 mysql mysql 4691 Mar 3 2012 support-files/my-huge.cnf
-rw-r--r-- 1 mysql mysql 19759 Mar 3 2012 support-files/my-innodb-heavy-4G.cnf
-rw-r--r-- 1 mysql mysql 4665 Mar 3 2012 support-files/my-large.cnf
-rw-r--r-- 1 mysql mysql 4676 Mar 3 2012 support-files/my-medium.cnf
-rw-r--r-- 1 mysql mysql 2840 Mar 3 2012 support-files/my-small.cnf
說明:
不同的配置文件,要求的內存都不一樣。
復制配置文件到/etc/mysql 目錄下,並命名為:my.cnf
1
[root@node1 mysql]# cp support-files/my-large.cnf /etc/mysql/my.cnf
4、啟動MySQL資料庫伺服器之前要做的一些設置
(1)、修改MySQL的配置文件
1
2
3
[root@node1 mysql]# vim /etc/mysql/my.cnf
thread_concurrency = 4 設置線程數
datadir = /logdata/data 告訴MySQL伺服器數據目錄的位置
說明:
由於這些配置是作用於MySQL伺服器的。要把它寫在:[mysqld]段中。
(2)、復制啟動MySQL資料庫伺服器的啟動腳本,並命名為:mysqld
1
[root@node1 mysql]# cp support-files/mysql.server /etc/init.d/mysqld
檢查是否執行許可權
1
2
[root@node1 mysql]# ll /etc/init.d/mysqld
-rwxr-xr-x 1 root root 10650 Aug 20 15:55 /etc/init.d/mysqld
(3)、把mysqld服務啟動腳本添加到chkconf的控制列表裡,能夠使用【server】命令控制服務的行為。 可以實現開機自動啟動。
1
2
3
[root@node1 mysql]# chkconfig --add mysqld
[root@node1 mysql]# chkconfig --list mysqld
mysqld 0:off 1:off 2:on 3:on 4:on 5:on 6:off
5、啟動MySQL資料庫並修改設置用戶
啟動MySQL資料庫伺服器
1
2
[root@node1 mysql]# service mysqld start
Starting MySQL.. [ OK ]
查看監聽埠
1
2
[root@node1 mysql]# netstat -anptl | grep mysqld
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 3041/mysqld
注意:
㈣ 海量日誌數據存儲用 elasticsearch 和 hbase 哪個好
從基本功能來說這兩個確實有相似性,但是根據業務需求不同,我覺得有幾點可以考慮:
1. 查詢復雜度:HBase支持簡單的行或者range查詢,比如給一個PK查該行的數據,或者給一個begin/end查這個范圍的數據,如果想完成更復雜的功能就不太容易。而ES支持的查詢比較豐富,或者說這些查詢都帶有一點復雜計算的味道了。比如你有個論壇,你想查帖子裡面是否包含敏感詞,如果採用HBase就比較麻煩,使用HBase你可以將帖子存進來、讀出去,但是要查內容裡面的東西,只能一點點過濾;而ES是可以比較方便的幫助你完成這個功能的;
2. 數據量:按道理說兩者都是支持海量數據的,但是據我個人感覺,HBase可能更容易支持更多的數據,因為其一開始設計就是解決海量問題的;而ES是後來慢慢增強其存儲擴展性的;那麼也就是說,HBase上手起來擴展性不太會阻礙你使用;ES可能要多費點勁。當然,聽說也有人寫了ES基於Azure或者S3的存儲插件,但是穩定性不知道如何;
3. 剩下的就是比較遠的考慮,比如維護性,HBase基於Hadoop那一套,組件多,維護起來代價也不低,而ES自成體系,維護起來稍微好點;當然這個是相對的,絕對來說都不會容易。
㈤ 用什麼資料庫存儲訪問日誌做分析比較好
日誌記錄的是,我們操作系統或某個服務或某個軟體在運行過程當中所產生事件信息的,這對於我們後續分析系統比較有價值。
比如,某個服務在運行過程中出現故障了,就可以查看該服務的日誌信息,分析日誌找出服務出現故障的原因所在。
如:我們使用【yum】工具安裝軟體,系統都會把程序yum做的操作記錄到日誌里。
如果,我們管理的不是一台主機,每台主機的日誌信息都是單獨存放的,如果要分析報告當前所有主機的的所有服務的過去某一時間段運行狀態,我們則要逐一查看每一台主機的日誌文件了。這很不方便。不利於使用一些日誌分析工具來分析日誌。所以我們要做日誌的集中化存儲。意思是說:把所有主機產生日誌信息發往日誌伺服器,由日誌伺服器幫助眾多需要存儲日誌數據的主機存儲日誌數據。
存儲日誌數據有兩種方式:
1、使用文件存儲日誌數據
2、把日誌信息存儲到資料庫里
㈥ 如何實現日誌的集中化存儲以及使用loganalyzer做日誌分析
如何實現日誌的集中化存儲以及使用loganalyzer做日誌分析
1、下載網站日誌:
流程如下:主機獨立控制面板——網站情報系統分析——網站日誌——下載WebLog日誌——右鍵點擊查看,鏈接另存為
在主機獨立控制面板中,找到網站情報系統分析板塊,裡面就能看到網站日誌了,點擊下載WebLog日誌,能看到最近幾天的網站日誌,但是點擊查看進去,會發現是一堆看不懂的代碼,沒有關系,我們先不要進去查看,而是右鍵點擊查看,鏈接另存為,下載網站日誌。
——————
2、代碼看不懂的話,可以使用光年日誌分析軟體GnAnalyzer,這是一個可以幫助我們進行網站日誌分析的軟體。比如蜘蛛抓取的情況,日誌裡面都有顯示。
——————
3、光年日誌分析軟體的使用:
下載好網站日誌後,就可以使用光年日誌分析軟體進行網站日誌的分析了。
流程如下:光年日誌分析軟體文件夾中的GnAnalyzer.exe——文件菜單,新建任務——添加(類型選擇所有文件)——下一步,保存——馬上分析
——————
4、網站日誌分析:
馬上分析後,就可以查看當天:蜘蛛分析(概要分析、目錄抓取、頁面抓取、IP排行);搜索引擎分析(關鍵字分析);狀態碼分析(用戶狀態碼、蜘蛛狀態碼)的相關信息。
㈦ exchange 2003 事務日誌文件存儲空間不足,怎樣處理啊請各位大俠指導啊。 QQ:278209287
刪除一些日誌文件就好了。
㈧ 深入理解kafka(五)日誌存儲
5.1文件目錄布局
根目錄下有以下5個checkpoint文件: cleaner-offset-checkpoint, log-start-offset-checkpoint, meta.properties, recovery-point-offset-checkpoint, replication-offset-checkpoint
分區目錄下有以下目錄: 0000xxx.index(偏移量為64位長整形,長度固定為20位), 0000xxx.log, 0000xxx.timeindex.
還有可能包含.deleted .cleaned .swap等臨時文件, 以及可能的.snapshot .txnindex leader-epoch-checkpoint
5.2日誌格式演變
5.2.1 v0版本
kafka0.10.0之前
RECORD_OVERHEAD包括offset(8B)和message size(4B)
RECORD包括:
crc32(4B):crc32校驗值
magic(1B):消息版本號0
attributes(1B):消息屬性。低3位表示壓縮類型:0-NONE 1-GZIP 2-SNAPPY 3-LZ4(0.9.x引入)
key length(4B):表示消息的key的長度。-1代表null
key: 可選
value length(4B):實際消息體的長度。-1代表null
value: 消息體。可以為空,如墓碑消息
5.2.2 v1版本
kafka0.10.0-0.11.0
比v0多了timestamp(8B)欄位,表示消息的時間戳
attributes的第4位也被利用起來,0表示timestamp的類型為CreateTime,1表示timestamp的類型為LogAppendTime
timestamp類型由broker端參數log.message.timestamp.type來配置,默認為CreateTime,即採用生產者創建的時間戳
5.2.3 消息壓縮
保證端到端的壓縮,服務端配置compression.type,默認為"procer",表示保留生產者使用的壓縮方式,還可以配置為"gzip","snappy","lz4"
多條消息壓縮至value欄位,以提高壓縮率
5.2.4 變長欄位
變長整形(Varints):每一個位元組都有一個位於最高位的msb位(most significant bit),除了最後一個位元組為1,其餘都為0,位元組倒序排列
為了使編碼更加高效,Varints使用ZigZag編碼:sint32對應 (n<<1)^(n>>31) sint64對應 (n<<1)^(n>>63)
5.2.5 v2版本
Record Batch
first offset:
length:
partition leader epoch:
magic:固定為2
attributes:兩個位元組。低3位表示壓縮格式,第4位表示時間戳類型,第5位表示事務(0-非事務1-事務),第6位控制消息(0-非控制1控制)
first timestamp:
max timestamp:
procer id:
procer epoch:
first sequence:
records count:
v2版本的消息去掉了crc欄位,另外增加了length(消息總長度)、timestamp delta(時間戳增量)、offset delta(位移增量)和headers信息,並且棄用了attributes
Record
length:
attributes:棄用,但仍占據1B
timestamp delta:
offset delta:
headers:
5.3日誌索引
稀疏索引(sparse index):每當寫入一定量(broker端參數log.index.interval.bytes指定,默認為4096B),偏移量索引文件和時間索引文件分別對應一個索引項
日誌段切分策略:
1.大小超過broker端參數log.segment.bytes配置的值,默認為1073741824(1GB)
2.當前日誌段消息的最大時間戳與當前系統的時間戳差值大於log.roll.ms或者log.roll.hours,ms優先順序高,默認log.roll.hours=168(7天)
3.索引文件或者時間戳索引文件的大小大於log.index.size.max.bytes配置的值,默認為10485760(10MB)
4.偏移量差值(offset-baseOffset)>Integer.MAX_VALUE
5.3.1 偏移量索引
每個索引項佔用8個位元組,分為兩個部分:1.relativeOffset相對偏移量(4B) 2.position物理地址(4B)
使用kafka-mp-log.sh腳本來解析.index文件(包括.timeindex、.snapshot、.txnindex等文件),如下:
bin/kafka-mp-log.sh --files /tmp/kafka-logs/topicId-0/00……00.index
如果broker端參數log.index.size.max.bytes不是8的倍數,內部會自動轉換為8的倍數
5.3.2 時間戳索引
每個索引項佔用12個位元組,分為兩個部分:1.timestamp當前日誌分段的最大時間戳(12B) 2.relativeOffset時間戳對應的相對偏移量(4B)
如果broker端參數log.index.size.max.bytes不是12的倍數,內部會自動轉換為12的倍數
5.4日誌清理
日誌清理策略可以控制到主題級別
5.4.1 日誌刪除
broker端參數log.cleanup.policy設置為delete(默認為delete)
檢測周期broker端參數log.retention.check.interval.ms=300000(默認5分鍾)
1.基於時間
broker端參數log.retention.hours,log.retention.minutes,log.retention.ms,優先順序ms>minutes>hours
刪除時先增加.delete後綴,延遲刪除根據file.delete.delay.ms(默認60000)配置
2.基於日誌大小
日誌總大小為broker端參數log.retention.bytes(默認為-1,表示無窮大)
日誌段大小為broker端參數log.segment.bytes(默認為1073741824,1GB)
3.基於日誌起始偏移量
DeleteRecordRequest請求
1.KafkaAdminClient的deleteRecord()
2.kafka-delete-record.sh腳本
5.4.2 日誌壓縮
broker端參數log.cleanup.policy設置為compact,且log.cleaner.enable設置為true(默認為true)
5.5磁碟存儲
相關測試:一個由6塊7200r/min的RAID-5陣列組成的磁碟簇的線性寫入600MB/s,隨機寫入100KB/s,隨機內存寫入400MB/s,線性內存3.6GB/s
5.5.1 頁緩存
Linux操作系統的vm.dirty_background_ratio參數用來指定臟頁數量達到系統的百分比之後就觸發pdflush/flush/kdmflush,一般小於10,不建議為0
vm.dirty_ratio表示臟頁百分比之後刷盤,但是阻塞新IO請求
kafka同樣提供同步刷盤及間斷性強制刷盤(fsync)功能,可以通過log.flush.interval.messages、log.flush.interval.ms等參數來控制
kafka不建議使用swap分區,vm.swappiness參數上限為100,下限為0,建議設置為1
5.5.2 磁碟I/O流程
一般磁碟IO的場景有以下4種:
1.用戶調用標准C庫進行IO操作,數據流為:應用程序Buffer->C庫標准IOBuffer->文件系統也緩存->通過具體文件系統到磁碟
2.用戶調用文件IO,數據流為:應用程序Buffer->文件系統也緩存->通過具體文件系統到磁碟
3.用戶打開文件時使用O_DIRECT,繞過頁緩存直接讀寫磁碟
4.用戶使用類似dd工具,並使用direct參數,繞過系統cache與文件系統直接讀寫磁碟
Linux系統中IO調度策略有4種:
1.NOOP:no operation
2.CFQ
3.DEADLINE
4.ANTICIPATORY
5.5.3 零拷貝
指數據直接從磁碟文件復制到網卡設備中,不需要經應用程序
對linux而言依賴於底層的sendfile()
對java而言,FileChannal.transferTo()的底層實現就是sendfile()
㈨ 怎麼樣保存網上的日誌
1--離線使用和收藏這個功能不能實現日誌保存
2--樓上方法都沒試過,我是通過保存視頻 音樂 的通用方法來實現日誌保存的並且n年前就開始這樣保存了~~
打開空間--網路日誌--選中所有要保存的日誌(按shift或者ctrl實現全部選中不用教了吧)--在選中區域任意位置按右鍵--在彈出的菜單中選擇「使用迅雷下載」
3--如果樓主不使用工具下載的話也可以直接下載,強調的是不要錯誤的選擇了「下載選中連接」
4--仍然建議使用工具,下載後可以方便的選擇保存位置~如果沒有想好保存在哪裡,就暫時放在工具裡面也無所謂,中毒了也不容易丟失
