① 直播平台搭建,網頁版已經搭建好了,就差nodejs配置了。有沒有會的。只要你會。源碼免費送
本章節我們將向大家介紹在window和linux上安裝Node.js的方法。
本安裝教程以Node.js v4.4.3 LTS(長期支持版本)版本為例。
Node.js安裝包及源碼下載地址為:
如果你獲得以上輸出結果,說明你已經成功安裝了Node.js。
Ubuntu 上安裝 Node.js
Node.js 源碼安裝
以下部分我們將介紹在Ubuntu Linux下安裝 Node.js 。 其他的Linux系統,如Centos等類似如下安裝步驟。
在 Github 上獲取 Node.js 源碼:
$ sudo git clone
修改目錄許可權:
$ sudo chmod -R 755 node
使用./configure創建編譯文件,並按照:
$ cd node
$ sudo ./configure
$ sudo make
$ sudo make install
查看 node 版本:
$ node --version
v0.10.25
Ubuntu apt-get命令安裝
命令格式如下:
sudo apt-get install nodejs
sudo apt-get install npm
CentOS 下安裝 Node.js
1、下載源碼,你需要在下載最新的Nodejs版本,本文以v0.10.24為例:
cd /usr/local/src/wget
2、解壓源碼
tar zxvf node-v0.10.24.tar.gz
3、 編譯安裝
cd node-v0.10.24./configure --prefix=/usr/local/node/0.10.24make
make install
4、 配置NODE_HOME,進入profile編輯環境變數
vim /etc/profile
設置nodejs環境變數,在export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL一行的上面添加如下內容:
#set for nodejsexport NODE_HOME=/usr/local/node/0.10.24export PATH=$NODE_HOME/bin:$PATH
:wq保存並退出,編譯/etc/profile 使配置生效
source /etc/profile
驗證是否安裝配置成功
node -v
輸出 v0.10.24 表示配置成功
npm模塊安裝路徑
/usr/local/node/0.10.24/lib/node_moles/
註:Nodejs 官網提供了編譯好的Linux二進制包,你也可以下載下來直接應用。
② nodejs怎麼把html以源碼的形式在網頁中顯示了,而不是解析它
可以通過設置輸出到瀏覽器的'Content-Type的值為text/html即文本類型的html即可實現將html代碼發送到瀏覽器中解釋,而如果設置的值為text/plain則值會顯示為文本而不會被瀏覽器渲染。
代碼實例如下:
consthttp=require('http');
consthostname='127.0.0.1';
constport=3000;
constserver=http.createServer((req,res)=>{
res.statusCode=200;
res.setHeader('Content-Type','text/html');
res.end("<pstyle='color:red;font-size:30px;'>helloworld</p>");
});
server.listen(port,hostname,()=>{
console.log(`伺服器運行在http://${hostname}:${port}/`);
});
運行的結果如下:
③ nodejs linux源碼安裝要多久
/bin/bash #檢查是否已經安裝 rpm -qa | grep python #查版本 python #最好是重新安裝 Python推薦版本( >= v2.5.0 & < 3.0.0 ),否則影響nodejs運行 #進入安裝目錄 cd /usr/local/ #刪除原有安裝 rm -rf node rm -rf node-v0.10.29-linux-x64 ...
④ 2020-08-25
Prometheus 實現郵件告警(Prometheus+Alertmanager+QQ郵箱或者網易163郵箱,目前測試過這兩種郵箱都可以發送告警郵件)
Prometheus實現郵件告警原理如下:
Prometheus官方有一個附帶的中間件:alertmanager,通過設置rules規則和路由轉發可以實現郵件告警,前提是你需要有一個可以發送郵件的郵件服務端(可以自建或者使用互聯網公司提供的免費郵箱)
告警原理圖
Prometheus完整架構圖
我之前得出的錯誤結論如下:
推薦直接在虛擬機操作系統上直接安裝Prometheus和Alertmanager,不推薦其中任何一方在容器中運行,因為測試過在容器中運行Prometheus和alertmanager,結果出現如下錯誤情況
第一種情況是:我的node-exporter掉線跌機了(手動關機,模擬突然掉線跌機),Prometheus卻提示節點依然在線?有時候卻能夠正常顯示節點掉線跌機,生成告警發送郵件
第二種情況是:我的node-exporter掉線跌機了(手動關機,模擬突然掉線跌機),Prometheus提示節點掉線,告警生成,但是沒有發送郵件,我手動恢復node-exporter後,告警解除,郵件能正常發送郵件提示告警已經解除。。。。
第三種情況是:我的node-exporter掉線跌機了(手動關機,模擬突然掉線跌機),Prometheus提示節點掉線,告警生成,正常成功發送郵件,我手動恢復node-exporter後,告警解除,郵件沒有發送出來。。。。
以上三種情況之前經常出現,當時第一步以為是自己設置的scrape_interval不合理導致的,結果調試幾次,問題沒有解決,第二步以為是自己的伺服器時間沒有做到精確同步,然後我去設置和阿里雲的ntp伺服器同步,結果問題依然沒有解決,第三步,換個方向,把alertmanager遷移到虛擬機操作系統上安裝運行,問題解決!
北京時間是GMT+8小時,有些同志的時間可能是UTC的,但是如果是在要求不太十分精確的情況下,UTC時間是剛剛好等於GMT時間
為了避免時區的混亂,prometheus所有的組件內部都強制使用Unix時間,對外展示使用GMT時間。
要改時區有兩個辦法
1 .修改源碼,重新編譯。
2. 使用 docker 運行 Prometheus,掛載本地時區文件
docker run --restart always -e TZ=Asia/Shanghai --hostname prometheus --name prometheus-server -d -p 9090:9090 -v /data/prometheus/server/data:/prometheus -v /data/prometheus/server/conf/prometheus.yml:/etc/prometheus/prometheus.yml -u root prom/prometheus:v2.5.0
正文開始
安裝alertmanager
容器安裝方式:
docker run -d --name alertmanager -p 9093:9093 -v /usr/local/Prometheus/alertmanager/alertmanager.yml:/etc/alertmanager/alertmanager.yml prom/alertmanager:latest
先在宿主機/usr/local/Prometheus下創建一個文件夾alertmanager,然後在文件夾里創建alertmanager.yml配置文件,待會才能映射到alertmanager容器里的/etc/alertmanager目錄下
global:全局配置
resolve_timeout: 問題解決的超時時間
smtp_from: 發送告警郵件的郵箱賬號
smtp_smarthost: 郵箱 SMTP 服務地址,這里是以QQ郵箱為例,也可以用網易163郵箱,這個和我之前設置zabbix郵件告警時的配置一樣
smtp_auth_username: 如果沒有設置郵箱別名,那就是賬戶名
smtp_auth_password: 郵箱的授權碼,不是 賬戶密碼,你可以在QQ郵箱或者網易163郵箱網頁端設置,開啟 POP3/SMTP 服務時會提示,和配置zabbix郵件告警的時候幾乎一樣
smtp_require_tls: 是否使用 tls,根據環境不同,來選擇開啟和關閉。如果提示報錯 email.loginAuth failed: 530 Must issue a STARTTLS command first,那麼就需要設置為 true。著重說明一下,如果開啟了 tls,提示報錯 starttls failed: x509: certificate signed by unknown authority,需要在 email_configs 下配置 insecure_skip_verify: true 來跳過 tls 驗證。
templates: 告警模板目錄,可以不編寫模板,有默認模板
Subject: '{{ template "email.default.subject" . }}'
html: '{{ template "email.default.html" . }}'
route:報警的分發設置
group_by:分組
group_wait: 分組等待時間
group_interval: 5m 每組時間間隔
repeat_interval: 10m 重復間隔
receiver: 接收方式,請注意!這里的名字要對應下面receivers中的任何一個名字,不然會報錯,這里其實就是選擇方式,有郵箱,企業微信,wehook,victorops等等
receivers:接受方式匯總,即告警方式匯總
例子:
receivers:
- name:'default-receiver'
email_configs:
- to:'[email protected]'
html: '{{ template "alert.html" . }}'
headers: { Subject: "[WARN] 報警郵件test"}
inhibit_rules: 抑制規則
當存在與另一組匹配的警報(源)時,抑制規則將禁用與一組匹配的警報(目標)。
包括源匹配和目標匹配
alertmanager官方是這樣說的
Inhibition
Inhibition is a concept of suppressing notifications for certain alerts if certain other alerts are already firing.
Example: An alert is firing that informs that an entire cluster is not reachable. Alertmanager can be configured to mute all other alerts concerning this cluster if that particular alert is firing. This prevents notifications for hundreds or thousands of firing alerts that are unrelated to the actual issue.
Inhibitions are configured through the Alertmanager's configuration file.
當存在與另一組匹配器匹配的警報(源)時,禁止規則會使與一組匹配器匹配的警報(目標)靜音。目標警報和源警報的equal列表中的標簽名稱都必須具有相同的標簽值。
在語義上,缺少標簽和帶有空值的標簽是同一件事。因此,如果equal源警報和目標警報都缺少列出的所有標簽名稱,則將應用禁止規則。
為了防止警報禁止自身,與規則的目標和源端 都 匹配的警報不能被警報(包括其本身)為真來禁止。但是,我們建議選擇目標匹配器和源匹配器,以使警報永遠不會同時匹配雙方。這很容易進行推理,並且不會觸發此特殊情況。
接著是規則rules
不解釋了,自己研究官方文檔
alertmanager的非容器安裝方式是
wget https://github.com/prometheus/alertmanager/releases/download/v0.20.0/alertmanager-0.20.0.linux-amd64.tar.gz
tar xf alertmanager-0.20.0.linux-amd64.tar.gz
mv alertmanager-0.20.0.linux-amd64 /usr/local/alertmanager
vim /usr/lib/systemd/system/alertmanager.service
[Unit]
Description=alertmanager
Documentation=https://github.com/prometheus/alertmanager
After=network.target
[Service]
Type=simple
User=root
ExecStart=/usr/local/alertmanager/alertmanager --config.file=/usr/local/alertmanager/alertmanager.yml
Restart=on-failure
[Install]
WantedBy=multi-user.target
Alertmanager 安裝目錄下默認有 alertmanager.yml 配置文件,可以創建新的配置文件,在啟動時指定即可。
其餘方式和上面一樣
接著是Prometheus,我之前的博客里有寫了容器安裝和非容器安裝的方法,自己去翻閱
然後是在prometheus.yml里修改相關配置
首先去掉alertmanager的注釋,改成IP加你設置的埠號,默認是9093
接著在rule_files: 下面寫下規則文件的絕對路徑,可以是具體文件名,也可以是*,也可以分幾級文件,*默認是全部匹配
接著是被監控項的設置,這里設置完成可以在Prometheus網頁里的targets里看得到
請注意,這里設置的參數名字要和rule規則中設置的參數名字一模一樣,否則你的prometheus服務會無法啟動,然後報錯
如果不在特定的job下設置scrape_interval(優先順序高於全局),則默認採用gobal下的scrape_interval
最後模擬節點掉線,手動關閉node-exporter或者Cadvisor
docker stop node-exporter 或者容器ID
docker stop cadvisor 或者容器ID
或者把up{{job='prometheus'}} == 1 設置成1,反向設置,不用關掉服務,就可以看看告警成不成功
說明一下 Prometheus Alert 告警狀態有三種狀態:Inactive、Pending、Firing。
Inactive:非活動狀態,表示正在監控,但是還未有任何警報觸發。
Pending:表示這個警報必須被觸發。由於警報可以被分組、壓抑/抑制或靜默/靜音,所以等待驗證,一旦所有的驗證都通過,則將轉到 Firing 狀態。
Firing:將警報發送到 AlertManager,它將按照配置將警報的發送給所有接收者。一旦警報解除,則將狀態轉到 Inactive,如此循環。
沒有配置告警模板時的默認告警格式是這樣的
節點恢復後郵件告知是這樣的
寫了模板後是這樣的
還要重新映射模板文件夾路徑到alertmanager容器里的相對路徑,然後重啟alertmanager,當然,如果目錄下沒有模板文件,則不顯示
告警模板
在alertmanager.yml中修改相關設置
重啟alertmanager
docker restart alertmanager
最終效果不是很好