EExcel 丞燕快速查詢2

EExcel 丞燕快速查詢2
EExcel 丞燕快速查詢2 https://sandk.ffbizs.com/

docker docker-compose run docker-compose.yml one part

docker-compose.yml


services:
  elasticsearch:

  logstash:

  kibana:

  nginx:




docker-compose run ngnix

docker-compose run kibana


two hex digits per byte

one byte = 8 bit

4 bit => hex 0000 2*2*2*2 = 16

so

one byte = 4bit + 4bit = hex + hex

sleep async await

https://gist.github.com/danharper/74a5102363fbd85f6b67



async () => {
  console.log('a');
  await sleep(1000);
  console.log('b');
}

mocha supertest geth mine


1、node & npm

apk add nodejs npm nano curl


2、mkdir t   put files to t or nano test.js

2.1、nano test.js



var supertest = require('supertest');

describe('GET http://go-ethe:8545/', function () {

    let request = supertest('http://go-ethe:8545')
    it('respond with json 1', function (done) {
        request.post('/')
            .send({"jsonrpc":"2.0","method":"miner_start","params":[1],"id":1})
            .expect('Content-Type', /json/)
            .expect(200, done);
    });

    let gethcmd = {"jsonrpc":"2.0","method":"eth_mining","params":[],"id":1}
    it('respond with json mining actively start ', function (done) {
        request.post('/')
            .send(gethcmd)
            .expect('Content-Type', /json/)
            .expect(200)
            .expect((res)=>{if (!(true == res.body.result) ) throw new Error("mining actively start failed!"); })
            .end(done);
    });

    it('respond with json 2', function (done) {
        request.post('/')
            .send({"jsonrpc":"2.0","method":"miner_stop","params":[],"id":1})
            .expect('Content-Type', /json/)
            .expect(200, done);
    });

    let gethcmd2 = {"jsonrpc":"2.0","method":"eth_mining","params":[],"id":1}
    it('respond with json mining actively stop ', function (done) {
        request.post('/')
            .send(gethcmd2)
            .expect('Content-Type', /json/)
            .expect(200)
            .expect((res)=>{if (!(false == res.body.result) ) throw new Error("mining actively stop failed!"); })
            .end(done);
    });

});



3、npm init -y && npm i -S supertest mocha


4、npm init get .node_modules directory, npm i -S get mocha & supertest

RUN> ./node_modules/mocha/bin/mocha test.js





====================
https://willi.am/blog/2014/07/28/test-your-api-with-supertest/


request.
    .get('/')
    .expect({message: "Hello, World!"}, done);

This way {ooxx: ooxx, ooxx: ooxx} must put all detail.


====================
curl -X POST -H "Content-Type: application/json" --data '{"jsonrpc":"2.0","method":"miner_start","params":[1],"id":1}' go-ethe:8545


curl -X POST -H "Content-Type: application/json" --data '{"jsonrpc":"2.0","method":"miner_stop","params":[],"id":1}' go-ethe:8545


Method
https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_mining

關在廁所中

這時外資群若想出脫要怎麼出?宏碁在23時,離淨值這麼遠,華碩都在淨值了,佳世達了不起一年的眼光費,宏碁還要四年的眼光費,目前大力的砍,大力的殺,外資群企圖引出買盤,這樣才有機會再進一步的出脫手上的股票,當有人進來了,再來慢慢的演一場八點檔

有一部經典港劇,鄭少秋和劉青雲主演的,故事說一個空方大鱷在狙擊港股,找了鄭少秋和劉青雲父子檔來股市操盤要對抗大鱷,鄭少秋和劉青雲找來了大型上市櫃公司的老闆來,類似我們的台灣五十成份股,找了張忠謀,郭台銘,林百里…等,股市一開盤,鄭少秋和劉青雲開始放空,大鱷也開始放空,有人會覺得奇怪,不是對抗嗎?怎麼一起放空?兩大主力一起放空,股市當然一直跌,一直跌,這時大老闆很生氣說,叫你們對抗,你們怎麼聯合一起空?劉青雲和大老闆們說,你認為你們公司是垃圾嗎?沒有價值嗎?大老闆們生氣回答,當然不是垃圾,公司每年可以創造很高的營盈,這時劉青雲說,這不就得了,有價值的股票最終一定會引來中實戶及大戶的進駐,只是沒有人知道這些中實戶及大戶心中的價值區在哪,所以我們就測試,此持雙方持續放空,股市跌到到了某一個點後,不論雙方怎麼空,怎麼賣都跌不下去,此時劉青雲放手叫大家別放空,時間過了三分鐘,股市湧入大盤的買盤,來自已散戶,中實戶,大戶,此時劉青雲反手做多開始強力買進,最後空方大鱷就被抬出去了。

ethereum geth rpc Why The method miner_start does not exist/is not available

..............................................
..............................................
..............................................


go-ethereum

https://github.com/ethereum/go-ethereum/wiki/Management-APIs#miner




geth --rpcapi "db,personal,eth,net,web3" --rpc --rpcaddr "0.0.0.0" --rpccorsdomain "*" --rpcvhosts=*


So you want miner, need put "db,personal,miner,eth,net,web3"



curl -X POST -H "Content-Type: application/json" --data '{"jsonrpc":"2.0","method":"miner_stop","params":[],"id":1}' go-ethe:8545


{"jsonrpc":"2.0","id":1,"result":null}


Fxxx Document...............................................


Import see this url document

web3

https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_mining
https://github.com/ethereum/web3.js/

logstash kibana geth log ethereum Grok Constructor

filter


json {
  source => "message"
}

This mean is Try to use json format transfer log, then put some data to message filed. So some filed just be setting, and some data set to message.


.Use this to check mach and log
https://grokconstructor.appspot.com/do/match
https://blog.johnwu.cc/article/elk-logstash-grok-filter.html
https://github.com/logstash-plugins/logstash-patterns-core/blob/master/patterns/grok-patterns


This is geth log for example

A:
INFO [11-14|09:58:17.730] Generating DAG in progress epoch=1 percentage=99 elapsed=4m8.643s
INFO [11-15|01:41:33.455] Generating DAG in progress               epoch=1 percentage=9  elapsed=27.614s

B:
INFO [11-15|01:19:44.590] Loaded most recent local fast block      number=0 hash=656134…58fded td=1 age=49y7mo1h, Loaded most recent local fast block

C:
INFO [11-15|02:09:27.980] 🔨 mined potential block number=119 hash=ebaa58…5d8fa1, 🔨 mined potential block



A:

INFO [11-14|09:58:17.730] Generating DAG in progress epoch=1 percentage=99 elapsed=4m8.643s
INFO [11-15|01:41:33.455] Generating DAG in progress               epoch=1 percentage=9  elapsed=27.614s


%{DATA:logType} %{DATA:MONTHDAY} %{GREEDYDATA:message}\s+epoch=(?<epoch>\b\w+\b) percentage=(?<percentage>\b\w+\b)\s+elapsed=(?<elapsed>\b\w+\b)





B:

INFO [11-15|01:19:44.590] Loaded most recent local fast block      number=0 hash=656134…58fded td=1 age=49y7mo1h, Loaded most recent local fast block  


%{DATA:logType} %{DATA:MONTHDAY} %{DATA:message} number=(?<minedNumber>\b\w+\b) hash=(?<minedHashr>\b\w+...\w+\b) td=(?<minedtd>\b\w+\b) age=(?<minedtd>\b\w+\b)%{DATA:message2}





C:

INFO [11-15|02:09:27.980] 🔨 mined potential block number=119 hash=ebaa58…5d8fa1, 🔨 mined potential block




OK~ C is best easy. No any other special. Only need to check is Space. log have Space, rule must have Space. And Space must same count. Have one Space in log, rule must Have Space.


B is Data same and tail how to do.

%{DATA:message}
%{DATA:message2}

let two "Loaded most recent local fast block" to DATA & message、message2


B have one thing is C Space must same. Here firest %{DATA:message} Data:Loaded most recent local fast block.....   This is all Space in message. So %{DATA:message} & number= have space or not, just to test check. Don't think too much.


A \s+ is different. This is for some data have space, but log look just same. So use this \s+ for have more space. Remeber \s+epoch=  no space rule, NOT \s+ epoch= .  Only little different. Just to test check. Don't think too much.




All Architecture is like this

docker-compose  & elk
https://sueboy.blogspot.com/2018/11/docker-compose-ethereum-geth-private.html

Change logstach pipline -> logstash.log





Now very clear.

So some different is add_field that is for check grok is work ok or not. If kibana have value = grok is work.

add_field marked filed just for test, can open then get double smae filed and value.

Grok can multiple.



totolink t10 雙11 特價2,990

雙11 有Line 回鐀Line point 10%,另外信用卡3.5% ,其他 商店街有折300和1100,1100搶不到,折300也不錯。



放在三層樓中每層樓接近 樓梯和中間,靠樓梯來互通吧,每層前後都收得到,算不錯了!


使用中跨樓層不會中斷,但訊號不見得很強,算是便宜中的精品了。

kibana default index-pattern

先建立index-pattern,匯出index-pattern json檔,然後刪除建立index-pattern後,再由rest api匯入。

1、顯示 index-pattern 列表  (先用web建立一個index-pattern)

curl http://localhost:5601/api/saved_objects/_find?type=index-pattern


2、匯出saved_objects index-pattern

curl http://localhost:5601/api/saved_objects/index-pattern/c0c02200-e6e0-11e8-b183-ebb59b02f871 > export.json

c0c02200-e6e0-11e8-b183-ebb59b02f871 是 1找到的id

json檔匯出後不可以直接用,必需頭尾補上
header補上:

{
"objects": [


end補上:

]}


3、匯入saved_objects index-pattern  (記得先砍了kibana-*)

curl -v -XPOST localhost:5601/api/kibana/dashboards/import?force=true -H 'kbn-xsrf:true' -H 'Content-type:application/json' -d @./export.json

json放在執行curl 同目錄就可以了


4、強制設定預設值 Kibana -> Managment -> Advanced Settings  defaultIndex

curl -XPOST http://localhost:5601/api/kibana/settings/defaultIndex -H "kbn-xsrf: true" -H "Content-Type: application/json" -d '{"value": "id"}'

id from export.json inside have id value

If already open kibana website, use Fresh (F5) page again.



======docker-compose===============



Kibanaconfig:
    image: alpine
    volumes:
      - ./kibana/config/:/usr/share/kibana/config:ro
    command: 
      - /bin/sh 
      - -c 
      - |
        echo '@edge http://dl-cdn.alpinelinux.org/alpine/edge/main' >> /etc/apk/repositories
        echo '@edge http://dl-cdn.alpinelinux.org/alpine/edge/community' >> /etc/apk/repositories
        echo '@edge http://dl-cdn.alpinelinux.org/alpine/edge/testing' >> /etc/apk/repositories
        apk --no-cache upgrade
        apk --no-cache add curl 
        id="c0c02200-e6e0-11e8-b183-ebb59b02f871"
        
        echo "=====Kibana default index-pattern ========"
        echo "=====Wait Kibana======="
        until echo | nc -z -v kibana 5601; do
          echo "Waiting for Kibana to start..."
          sleep 1
        done
        
        echo "=====kibana import json======"
        code=""
        until [ $$code != 400 ]; do
          echo "=====kibana importing json ======="
          curl -v -XPOST kibana:5601/api/kibana/dashboards/import?force=true -H "kbn-xsrf:true" -H "Content-type:application/json" -d @/usr/share/kibana/config/export.json 2>/dev/null | head -n 1 | cut -d ':' -f2|cut -d ',' -f1 > code.txt
          code=`cat code.txt`
          echo "=====status code:$$code====="
          sleep 3
        done

        echo "=====kibana setting default index-pattern====="
        code=""
        until [ $$code != 400 ]; do
          echo "=====kibana setting ==================================="
          curl -v -XPOST kibana:5601/api/kibana/settings/defaultIndex -H "kbn-xsrf:true"  -H "Content-Type: application/json" -d '{"value": "$$id"}'  2>/dev/null | head -n 1 | cut -d ':' -f2|cut -d ',' -f1 > code.txt
          code=`cat code.txt`
          echo "=====status code:$$code====="
          sleep 3
        done
    networks:
      - elk
    depends_on:
      - elasticsearch




ELK


elasticsearch:
    build:
      context: elasticsearch/
    volumes:
      - ./elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml:ro
    ports:
      - "9200:9200"
      - "9300:9300"
    environment:
      ES_JAVA_OPTS: "-Xmx256m -Xms256m"
    networks:
      - elk

  logstash:
    build:
      context: logstash/
    volumes:
      - ./logstash/config/logstash.yml:/usr/share/logstash/config/logstash.yml:ro
      - ./logstash/pipeline:/usr/share/logstash/pipeline:ro
    ports:
      - "5000:5000"
    environment:
      LS_JAVA_OPTS: "-Xmx256m -Xms256m"
    networks:
      - elk
    depends_on:
      - elasticsearch

  kibana:
    build:
      context: kibana/
    volumes:
      - ./kibana/config/:/usr/share/kibana/config:ro
    ports:
      - "5601:5601"
    networks:
      - elk
    depends_on:
      - elasticsearch

Ray Tracy ZFS

Ray Tracy 一個工具或技術, 能否達到你的期望用途, 關鍵在於:

使用者是否充分了解他, 並且能夠熟練的駕馭他.

世上沒有絕對好用的工具, 也沒有絕對該用甚麼的場景:

我曾經深度挖掘 zfs 的各種參數, 試圖調到最好, 經過半年之後卻發現, 當我的 Workload 特性有細微改變的時候, zfs 會放大這些改變, 導致整個運作偏離我預想的方向....(其實就是參數過度優化: Over-optimized, 但我發現 zfs 的參數很容易讓你走上這條路)

這問題, 導致我必須經常監督 zfs 的表現, 並記錄我的 workload 每一個時間軸的變化趨勢, 好讓我在下周或下個月, 遇到新的問題時, 知道該朝甚麼方向改變甚麼參數, zfs 才能獲得最佳結果.

這對 Hacker 或 Geek 來說, 是件無比美好的事情, 因為他們每周都可以看到新的變化, 接受新的挑戰, 然後從當中挖掘出更多 zfs 新的參數組合與用途, 再來發表給大家聞香敬拜....

但對機房的 SRE 來說, 這件事情根本就是噩夢, 因為原本可以安穩睡一個星期的覺, 現在變成每天半夜都睡不著, 你不知道他是否會在半夜 3 點突然惡化, 導致線上有 50 萬個會員在交易的電商網站, 反應變慢, 破圖, 甚至無法交易, 最後被客戶從睡夢中挖起來解決問題.....

我也跟您一樣, 試圖解決 Storage 同步的問題, 而引進 Gluster 技術. 剛開始看似一切正常, 資料都正常複寫, 直到有一天, 某一台 node 意外故障而重開, 觸發 Gluster 開始做 healing 的時候, 我才發現:

- 他的 healing 比我預期的時間更長上數十倍
- 他在 healing 期間會造成 VM 寫入資料異常
- 他在 node 發生 flip-flap 的時候, 會選出錯誤的 node

這些問題難道都沒測試過嗎? 有啊, 但是我測試的時候, 並沒有出現這些現象, 國外人家測試的時候, 也沒有特別警告這些現象; 初期也都沒問題, 是跑了幾個月之後, 才開始劣化....

所以, 我從每天調校 zfs, 轉成每天要調校 Gluster, 參數又多如牛毛, 排列組合起來有上百種變化, 然後又是生產環境, 我不能隨便停下來測試, 每一次調整都得確保線上系統不會掛掉, 也不能隨便重開機...

如果當初我知道會有這麼多問題, 我絕對不會這麼快就讓他上生產環境, 至少要測到我有信心為止. 但是, 最初的測試都顯示: 他們似乎是個很好的選擇, 直到我上了生產環境之後數個月, 才開始出問題....

最後我回到傳統硬體 RAID +NFS, 當然這樣的效能無法滿足原先用 zfs 的期待, 不過我又自行加上 bcache 技術設法加速, 只是我選擇比較保守的參數, 以資料安全性為優先, 不追求最高效能; 初步看起來, 這樣大概可以滿足我現行的狀況還剩一點點餘裕, 至少, 他不會造成我整個 I/O 被 block 住, 連 CPU 都被吃死死不能動的狀況 (此問題我在 zfs 和 gluster 都遇到)

但是這個組合, 沒辦法解決跨 Storage replication 的問題, 也就是沒有 HA; 所以, 我勢必要跳離這個方案, 目前下一個候選者是 Ceph, 但過去幾年來, Ceph 有名的除了很容易做到大容量 Scale-out 和 Replication 之外, 還有一個眾人皆知的缺陷是: 效能低落, 所以, 我該如何解決效能低落問題, 同時享受他帶來的 Scale-out 好處? 並且, 在我的環境內可以正常工作?

我的經驗, 並不代表別人也是同樣的狀況, 你可以找到許多把 zfs 和 gluster 用得很愉快的用戶, 但是他們的 workload 和環境也跟我大不相同....

這些 Storage 的課題, 都需要在實際環境中實做過才會知道...














向聖夫 這種 fine tuning 必須從 application 層級開始 跑很多 micro service 才有可能針對每一個 micro service 去優化
.
但是如果你把所有的 workload 放在一個 vm 裡面, 你會發現 你的 write 變快了 但是犧牲了你的 read.... 這個時候怎麼優化都會出問題

你有 sequential write 其實需要的是 spinning disk 才快

你有 random write 小 io 這個是要 nvme ssd 才快 Ray Tracy 說的 bcache 很讚 但是它還是有誤判的情況 以及每一顆 nvme ssd 的 controller 能夠同時處理的 thread 跟 command 都不一樣 所以你優化 A 牌的參數換到 B 牌上去時 是完全沒路用

如果你仔細觀察 nvme ssd 下的 controller busy time 你就會發現 當ssd command 塞爆的時候 你會發現它比 hdd 還慘 ( 不是 ssd 上的 ram buffer 用光了喲)




docker iptables part 2

restart docker service iptables be reset

Docker Basic rule (New Docker maybe change somethings)

*nat
:PREROUTING ACCEPT [27:11935]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [598:57368]
:POSTROUTING ACCEPT [591:57092]
:DOCKER - [0:0]
-A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER
-A OUTPUT ! -d 127.0.0.0/8 -m addrtype --dst-type LOCAL -j DOCKER
-A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE
COMMIT
# Completed on Sun Sep 20 17:35:31 2015
# Generated by iptables-save v1.4.21 on Sun Sep 20 17:35:31 2015
*filter 
:INPUT ACCEPT [139291:461018923]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [127386:5251162]
:DOCKER - [0:0]
-A FORWARD -o docker0 -j DOCKER
-A FORWARD -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i docker0 ! -o docker0 -j ACCEPT
-A FORWARD -i docker0 -o docker0 -j ACCEPT
COMMIT
# Completed on Sun Sep 20 17:35:31 2015



Other firewall control

iptables -A INPUT -s xxx.xxx.xxx.xxx/32 -j ACCEPT
iptables -A INPUT -s xxx.xxx.xxx.xxx/16 -j ACCEPT
iptables -A INPUT -s xxx.xxx.xxx.xxx/8 -j ACCEPT

iptables INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
iptables INPUT -m state --state NEW -m tcp -p tcp --dport 8545:8560 -j ACCEPT



======CentOS RedHatOS 需注意事項======

RH-Firewall-1-INPUT
http://linux.vbird.org/linux_server/0250simple_firewall/0250simple_firewall-centos5.php
http://www.voidcn.com/article/p-xnzrlybo-bhv.html

預設規則中,INPUT 與 FORWARD 的規則一致,因此 CentOS 將兩條鏈的規則寫在一塊,變成一個自訂鏈 RH-Firewall-1-INPUT 的鏈!

-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT


Red hat独有的防火墙设置,把INPUT 和 FORWARD 链引到一起统一处理。所以在这种防火墙规则的前提下,增加防火墙规则时,必须把规则都添加到子链RH-Firewall-1 -INPUT中,这样才会生效,添加到父链中是没有效果的。

RH-Firewall-1 -INPUT chain的最後一條規則是:
-A
RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
拒绝所有其他不符合上述任何一条规则的数据包。并且发送一条host prohibited的消息给被拒绝的主机。

解法:-A INPUT -> -A RH-Firewall-1-INPUT

另一種方式
http://blog.ihipop.info/2010/03/705.html

-I INPUT  移到 -A RH-Firewall-1-INPUT 上方
-I :插入一條規則。如果沒有指定此規則的順序,預設是插入變成第一條規則。



https://dywang.csie.cyut.edu.tw/dywang/linuxserver/node24.html

.不啟動 NAT 功能的 Linux 主機,只要使用過濾表格 filter 的 INPUT 及 OUTPUT 鏈就夠了

.啟用 NAT 主機,除過濾功能外,還要考慮 FORWARD 轉送功能,且要使用位址轉換表格的 POSTROUTING 鏈,將符合規則的封包,其封包位址由內網私有 IP 偽裝 (MASQUERADE) 成 NAT 對外 IP,才能連上網際網路