記一次日志項目從日志采集,分布式協調,中間件消費,到數據庫存儲管理,到圖形化界面展示
1 安裝java環境
官網下載想要的java版本,網址為:https://www.oracle.com/technetwork/java/javase/downloads/index.html
我下載的版本為jdk-12.0.1_linux-x64_bin.tar
創建目錄?
#mkdir -p /usr/local/java
解壓到/usr/local/java目錄下,
#tar -zvxf?jdk-12.0.1_linux-x64_bin.tar?
配置環境變量
#vi /etc/profile
export KAFKA_HOME=/app/kafka
export JAVA_HOME=/usr/local/java/jdk-12.0.1
export JRE_HOME=/usr/local/java/jdk-12.0.1
export CATALINA_BASE=/usr/local/tomcat
export CATALINA_HOME=/usr/local/tomcat
export CATALINA_TMPDIR=/usr/local/tomcat/temp
export CLASSPATH=/usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
export PATH=$PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin:/app/mongodb/bin:$KAFKA_HOME/bin
# source /etc/profile
驗證是否安裝成功
#java --version
java 12.0.1 2019-04-16
Java(TM) SE Runtime Environment (build 12.0.1+12)
Java HotSpot(TM) 64-Bit Server VM (build 12.0.1+12, mixed mode, sharing)
安裝jdk成功
2安裝zookeeper
?zookeeper集群的安裝,準備三臺服務器
server1:192.168.72.134
server2:192.168.72.135
server3:192.168.72.136
? ? 1)下載zookeeper
到http://zookeeper.apache.org/releases.html去下載最新版本,zookeeper-3.4.6.tar.gz
? ? 2)安裝zookeeper
先在服務器server分別執行a-c步驟
? ? a)解壓??
? ? #tar -zxvf zookeeper-3.4.6.tar.gz
? ? 創建目錄 mkdir /app
? ?#cp -r?zookeeper-3.4.6? /app/zookeeper
? ? b)配置
? ? 將conf/zoo_sample.cfg拷貝一份命名為zoo.cfg,也放在conf目錄下
dataDir,dataLogDir目錄需要提前創建出來?
#mkdir -p /app/zookeeper/zkdata
? mkdir -p /app/zookeeper/logs
?c )配置myid 文件
vi myid?
分別在server1,2,3上的配置文件里寫1,2,3
3)依次啟動server1,server2,server3
/app/zookeeper/bin/zkServer.sh start
4)檢查集群狀態
/app/zookeeper/bin/zkServer.sh status? ,1臺leader,2臺follower,說明集群啟動成功。
3安裝kafka
1)下載kafka,?http://kafka.apache.org/downloads
2)解壓縮?
tar -zvxf?kafka_2.11-2.3.0.tgz
cp -r kafka_2.11-2.3.0? /app/kafka
3)修改配置文件?
vi /app/kafka/config/server.properties ,server2,3, broker.id 分別改為2,3 ,其余配置項都一樣
log.dirs 地址可以先不用創建,在首次啟動kafka的時候,會自動進行創建。
zookeeper.connect 配置成zookeeper 集群的IP,端口
4)啟動broker ,分別啟動server1,2,3?
這個是在啟動broker之前需要保證zookeeper集群是運行著的,查看zookeeper集群狀態
? ? ?# /app/kafka/bin/kafka-server-start.sh? /app/kafka/config/server.properties
如果沒有出現日志錯誤,就使用下面的命令:
# nohup /app/kafka/bin/kafka-server-start.sh? /app/kafka/config/server.properties > logs/server-start.log 2>&1 &
其中,server-start.log是自己寫的一個log文件,在原有的文件logs下面是沒有的。
檢驗是否成功,查看進程ps -ef | grep kafka 或者jps
4安裝fluentd
fluentd是一款優秀的開源日志收集工具,td-agent 為穩定的,分布式的fluentd ,且易于安裝。
1)預安裝
a)Set up NTP,詳細https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/set-time.html
b)Increase Max # of File Descriptors
c) Optimize Network Kernel Parameters
2)安裝td-agent ,? CentOS and RHEL 6, 7 64bit are currently supported.
# curl -L https://toolbelt.treasuredata.com/sh/install-redhat-td-agent3.sh | sh
3)修改td-agent的配置文件
<match dmesg_2019>
? @id kafka.access1
? @type kafka_buffered
? @log_level info
? include_tag_key true
? brokers 192.168.72.134:9092,192.168.72.135:9092,192.168.72.136:9092? #kafka brokers的IP,端口號
? default_topic demsg_sys? #把日志采集到kafka中,topic 名稱為demsg_sys
? output_data_type? "json"
? output_include_tag? true
? output_include_time? true
? # get_kafka_client_log? true
? #? ? ? max_send_retries 3
? <buffer>
? ? @type file
? ? path /var/log/td-agent/buffers/dmesg_2019.buffer? #自己配置路徑
? ? flush_mode interval
? ? retry_type exponential_backoff
? ? flush_thread_count 2
? ? flush_interval 5s
? ? retry_forever
? ? retry_max_interval 30
? ? chunk_limit_size 2M
? ? queue_limit_length 8
? ? overflow_action block
? </buffer>
</match>
<source>
? @id dmesg_2019.log
? @type tail? ?#從日志文件的最后追加的部分會采集到
? time_key time_local
? path /var/log/dmesg? ?#需要采集的日志來源文件路徑
? pos_file /var/log/td-agent/dmesg_2019.log.pos? ??#自己配置路徑
? tag dmesg_2019? ?#與開頭的<match *** >同步
? format /^(?<message>[^.*].*)/ #將日志格式化成一條消息
? read_from_head true
</source>
4)啟動td-agent
systemctl start td-agent.service?
5)驗證日志是否采集到kafka中
打一條日志到/var/log/dmesg文件中
echo "Today is last work day before National Day" >> /var/log/dmesg
在kafka上查看消費情況
./kafka-console-consumer.sh --bootstrap-server 192.168.72.134:9092,192.168.72.135:9092,192.168.72.136:9092 --topic demsg_sys
5安裝clickhouse
1)首先,您需要添加官方存儲庫:
sudo yum install yum-utils
sudo rpm --import https://repo.yandex.ru/clickhouse/CLICKHOUSE-KEY.GPG
sudo yum-config-manager --add-repo https://repo.yandex.ru/clickhouse/rpm/stable/x86_64
如果您想使用最新版本,請將stable替換為testing(建議您在測試環境中使用)。
2)然后運行這些命令以實際安裝包:
sudo yum install clickhouse-server clickhouse-client
3)啟動
可以運行如下命令在后臺啟動服務:
sudo service clickhouse-server start
可以在/var/log/clickhouse-server/目錄中查看日志。
如果服務沒有啟動,請檢查配置文件?/etc/clickhouse-server/config.xml。
你也可以在控制臺中直接啟動服務:
clickhouse-server --config-file=/etc/clickhouse-server/config.xml
在這種情況下,日志將被打印到控制臺中,這在開發過程中很方便。 如果配置文件在當前目錄中,你可以不指定‘--config-file’參數。它默認使用‘./config.xml’。
你可以使用命令行客戶端連接到服務:
clickhouse-client
默認情況下它使用‘default’用戶無密碼的與localhost:9000服務建立連接。?
4)建表,創建一張表存儲想要從kafka中存儲的字段,加一列date字段。
CREATE TABLE cms.dmesg_sys2 (`date` Date, `message` String, `time` DateTime, `tag` String) ENGINE = MergeTree(date, (message, date), 8192);
6安裝gohangout
利用工具gohangout將kafka內的數據打到clickhouse,詳細信息請參閱?https://github.com/childe/gohangout
1)下載編譯后二進制文件
https://github.com/childe/gohangout/releases?直接下載
我下載的是最新的 gohangout-linux-x64-dc56981,加上執行權限
chmod +x?gohangout-linux-x64-dc56981
2)編輯配置文件
vi config.yml
inputs:
? ? - Kafka:
? ? ? ? topic:
? ? ? ? ? ? demsg_sys: 1? #kafka里的topic名稱
? ? ? ? codec: json
? ? ? ? consumer_settings:
? ? ? ? ? ? bootstrap.servers: "192.168.72.134:9092,192.168.72.135:9092,192.168.72.136:9092"? ?#kafka brokers的IP,端口
? ? ? ? ? ? group.id: gohangout.dmesg
filters:
? ? - Date:
? ? ? ? location: 'Asia/Shanghai'
? ? ? ? src: time
? ? ? ? target: 'time'
? ? ? ? formats:
? ? ? ? ? ? - 'UNIX'
outputs:
? ? - Clickhouse:
? ? ? ? table: 'cms.dmesg_sys2'? #clickhouse里創建的庫名,表名
? ? ? ? hosts:
? ? ? ? ? ? - 'tcp://localhost:9000'? ?#clickhouse地址
? ? ? ? fields: ['message','time','tag']? #要從kafka訂閱的列
? ? ? ? username: 'default'? ?#clickhouse 用戶名
? ? ? ? password: ""? ? ? ? ? ? #clickhouse default 默認無密碼
? ? ? ? bulk_actions: 1000
? ? ? ? flush_interval: 30
? ? ? ? concurrent: 1
3)啟動gohangout
./gohangout-linux-x64-dc56981 --config config.yml
4)驗證
向日志文件打印一條消息
echo "I am so happy today" >> /var/log/dmesg
在kafka看到消費端已經消費此條消息,
./kafka-console-consumer.sh --bootstrap-server 192.168.72.134:9092,192.168.72.135:9092,192.168.72.136:9092 --topic demsg_sys
最后,在clickhouse里查詢表cms.dmesg_sys2, 可以看到數據最終存儲到了clickhouse里面
后續:后續關于clickhouse物化視圖及 grafana展示待下篇文檔繼續。。。未完待續。。。敬請期待。。。